<分区>
在 PHP 中,当我使用 PDO
调用 MySQL
存储过程
,然后调用另一个 PDO
查询时,就像这样:
$dbh = new PDO('mysql:host=localhost;dbname=db1','user1','password1');
$query = "CALL get_token()";
$stmt = $dbh->query($query);
$array = $stmt->fetchAll();
$query = "SELECT * FROM `table1`";
$stmt = $dbh->query($query);
$array = $stmt->fetchAll();
MySQL
存储过程
大概是这样的:
CREATE PROCEDURE `get_token`()
BEGIN
DECLARE token CHAR(64);
DECLARE expire SMALLINT;
SELECT `token`, `expire` INTO token, expire FROM `token`;
SELECT token, expire;
END$$
我收到以下错误消息(使用 try...catch
来捕获它):
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.
即使我按照上述错误消息中描述的说明进行操作(这意味着使用 fetchAll()
并设置 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
属性),我仍然得到同样的错误信息。
如果我将第一个查询更改为普通的 SELECT
SQL 查询,而不是 存储过程
,我将不会收到此错误。所以看来问题出在存储过程
上。
但是我该如何解决呢?