【发布时间】:2010-02-01 10:21:43
【问题描述】:
我正在尝试使用从两个(临时)表中删除的准备好的语句:
public function clearTempTables()
{
static $delStmt = null;
if (null == $delStmt)
{
$delStmt = $this->pdo->prepare("DELETE FROM product_string_ids;
DELETE FROM product_dimension_value_ids;");
}
$delStmt->execute();
}
调用此函数成功,但之后执行语句时,收到如下错误:
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.
在创建我的 PDO 对象时设置 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY(如文档和许多 Web 示例中所示)似乎没有效果,并且调用 $delStmt->fetchAll() 会导致“SQLSTATE [HY000]:一般错误” ,这是有道理的,因为 delete 语句不应该返回并且结果无论如何都需要获取。
我在这里做错了什么?甚至可以像这样将多个 SQL 语句准备成一个语句吗?从性能的角度来看,这当然是有道理的,尤其是在处理大量查询的情况下,这些查询将在临时表上运行,然后只返回最终结果集。
【问题讨论】: