我在这里关注该教程: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查询。我在这里做错了什么吗?
答案 0 :(得分:0)
事实证明,这实际上是Laravel门面DB :: connection()问题。显然,对于LOAD DATA INFILE查询,使用statement()执行原始语句还不够好,而必须使用DB :: connection()-> getPdo()-> exec($ sql);