PDO未缓冲查询多个查询错误


PDO unbuffered queries multiple query error

我在尝试执行返回约100000行的查询时出错:

Fatal error: Uncaught exception 'PDOException' with message '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.'

该错误似乎表明多个查询同时运行,但在检查MySQL日志时,情况并非如此:

150226 15:10:28     3 Connect   root@localhost on Project
            3 Query SELECT * FROM Data WHERE posted > '2015-02-01 14:52:28' AND posted < '2015-02-19 18:36:56'
150226 15:11:00     3 Quit  

造成这种错误的原因是什么?

由于返回结果的大小,打开缓冲查询不是一个选项。

问题是mysql在给定的时间只允许一个未完成的游标。通过使用fetch()方法而不消耗所有挂起的数据,您就打开了一个游标。

推荐的方法是使用fetchAll()方法消耗所有数据。另一种选择是使用closeCursor()方法。