加载数据文件中的无缓冲查询错误

时间:2019-04-03 02:33:11

标签: php mysql

我在这里关注该教程:https://mikaelhoundegnon.wordpress.com/2018/05/02/work-around-of-mysql-load-data-infile-with-on-duplicate-key-update/。万一重要,请注意,我使用的是Laravel的查询生成器,但针对这些特定查询执行了原始语句。

我的代码如下:

$sql = "CREATE TEMPORARY TABLE temporary_part SELECT * FROM part WHERE 1=0";
        $con->statement($sql);

        $sql = "LOAD DATA INFILE '$filePath'
                INTO TABLE temporary_part
                FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
                (field1,field2,field3,field4)";
        $con->statement($sql);

然后我得到以下错误:

SQLSTATE [HY000]:常规错误:2014当其他无缓冲查询处于活动状态时,无法执行查询。考虑使用PDOStatement :: fetchAll()。另外,如果您的代码只打算针对mysql运行,则可以通过设置PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY属性来启用查询缓冲。 (SQL:LOAD DATA INFILE'/path/to/file.csv'插入表临时字段以','可选地以'“'终止的字段(field1,field2,field3,field4))

除了提供的代码中发生的事情之外,没有其他打开的查询。我已经确认是引发错误的LOAD DATA INFILE查询。我在这里做错了什么吗?

1 个答案:

答案 0 :(得分:0)

事实证明,这实际上是Laravel门面DB :: connection()问题。显然,对于LOAD DATA INFILE查询,使用statement()执行原始语句还不够好,而必须使用DB :: connection()-> getPdo()-> exec($ sql);