我正在关注这里的教程: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:将数据 INFILE '/path/to/file.csv' 加载到表临时部分字段,终止于 ',' 可选地包含于 '"' (field1,field2,field3,field4))
除了所提供的代码中发生的情况之外,没有任何其他开放查询。我已经确认是 LOAD DATA INFILE 查询引发了错误。我在这里做错了什么吗?
最佳答案
事实证明这实际上是 Laravel Facade DB::connection() 问题。显然,对于 LOAD DATA INFILE 查询,使用 statements() 执行原始语句还不够好,而必须使用 DB::connection()->getPdo()->exec($sql);
关于php - Load Data Infile 出现无缓冲查询错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55486172/