在我的 php 页面的顶部,我包含了一个连接脚本,该脚本由以下代码调用:
include("connector.php")
连接器.php
<?php
try
{
$db = new PDO('mysql:host=localhost;dbname=DB', 'USER', 'PW');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e)
{
echo $e->getMessage();
}
?>
然后,我会根据需要在我的页面上进行所有后续调用。然而,特别是在一页上,我最初调用了一个 MySQL 存储过程:
$stmt = $db->prepare("CALL Procedure(:id)");
$stmt->bindParam(':id', $id);
$stmt->execute();
while($row=$stmt->fetch()) {
echo "<tr>
<td>".$row['ID']."</td>
<td>".$row['NAME']."</td>
</tr>";
}
我的存储过程没有问题,但是当我尝试进行任何后续调用时,在页面下方,我得到了通常的 PDO Mysql 无缓冲查询错误:
致命错误:未捕获异常 'PDOException' 并带有消息 'SQLSTATE[HY000]:一般错误:2014 无法在其他无缓冲查询处于活动状态时执行查询。考虑使用 PDOStatement::fetchAll()。或者,如果您的代码只针对 mysql 运行,您可以通过设置 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 属性来启用查询缓冲。在 C:\page.php:261 堆栈跟踪:#0 C:\page.php(261): PDOStatement->execute(Array) #1 {main} 在第 261 行的 C:\page.php 中抛出
是的,我尝试过使用 FetchAll,但不,我不想使用 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 属性,因为我们可能会在稍后关闭 MySQL,而且我不希望基于每个 DB 进行重建(更不用说当我确实包含它时它不起作用)。
任何想法为什么会发生这种情况?我可以在每次 DB 调用之前“包含”connector.php 文件,但这似乎是重复的,我必须为每个语句设置 $db->NULL。
注意:这似乎只影响调用存储过程的页面。有任何想法吗?
注意:这是在运行 Apache 2.2.14、PHP 5.3.1 的 XAMPP 1.7.3 的 Windows 机器上运行的