我正在尝试使用从两个(临时)表中删除的预准备语句:
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]:一般错误“,这是有道理的,因为删除语句不应该返回,结果需要提取。
我在这里做错了什么?甚至可以将多个SQL语句准备到这样的单个语句中吗?从性能的角度来看,它确实有意义,尤其是大量的查询可以在临时表上运行,然后只返回最终的结果集。
答案 0 :(得分:1)
Afaik不可能将多个陈述准备为一个(合并的)预备陈述 但是DELETE syntax允许您指定多个表以从中删除行。
$this->pdo->prepare("
DELETE
product_dimension_value_ids,product_string_ids
FROM
product_dimension_value_ids,product_string_ids
");
(现在已经过测试)