Laravel-PDO准备语句-在其他无缓冲查询处于活动状态时无法执行查询 [英] Laravel - PDO Prepared Statement - Cannot execute queries while other unbuffered queries are active
问题描述
我无法在Laravel中运行以下准备好的语句:
I am having trouble running the following prepared statement in Laravel:
$pdo = DB::connection()->getPdo();
$ps_TempTable_PushCsv = $pdo->prepare(
"LOAD DATA LOCAL INFILE '123'
INTO TABLE `123`
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\\n'"
);
$ps_TempTable_PushCsv->execute();
$ps_TempTable_PushCsv->closeCursor();
$rowCount = $ps_TempTable_PushCsv->rowCount();
我收到以下错误:
[2017-06-08 03:41:35]本地.错误:PDOException:SQLSTATE [HY000]:一般错误:2014当其他无缓冲查询处于活动状态时,无法执行查询.考虑使用PDOStatement :: fetchAll().另外,如果您的代码只能在mysql上运行,则可以通过设置PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY属性来启用查询缓冲.
[2017-06-08 03:41:35] local.ERROR: PDOException: SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
这是我控制器的入口点,因此肯定没有在先的查询正在运行.
This is the entry-point of my controller, so there are definitely no prior queries running.
怎么办?
谢谢
推荐答案
我唯一可行的方法是用"exec"调用替换准备好的语句:
The only way I could get it working was to replace the prepared statement with an 'exec' call:
$rowCount = DB::connection()->getpdo()->exec(
"LOAD DATA LOCAL INFILE '$fileName'
INTO TABLE $tableName
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\\n'"
);
我不知道为什么在Laravel中使用预备语句不能使用它-它确实可以在纯PDO预备语句中使用.
I have no idea why it wouldn't work using a prepared statement in Laravel - it definitely does work with a pure PDO prepared statement.
这篇关于Laravel-PDO准备语句-在其他无缓冲查询处于活动状态时无法执行查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!