gpt4 book ai didi

php - PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 和准备语句中的多个删除语句

转载 作者:行者123 更新时间:2023-11-29 03:14:49 24 4
gpt4 key购买 nike

我正在尝试使用从两个(临时)表中删除的准备好的语句:

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(如文档和大量网络示例中所示)似乎没有效果,并且调用 $delStmt->fetchAll() 会导致“SQLSTATE[HY000]:一般错误” ,这是有道理的,因为删除语句不应该返回,结果无论如何都需要获取。

我在这里做错了什么?甚至可以将多个 SQL 语句准备成一个这样的语句吗?从性能的角度来看,这当然是有意义的,尤其是对于大量查询,这些查询会在临时表上运行,然后只返回最终结果集。

最佳答案

Afaik 不可能将多个语句准备为一个(组合的)准备好的语句。
但是 DELETE syntax允许您指定多个表以从中删除行。

$this->pdo->prepare("
DELETE
product_dimension_value_ids,product_string_ids
FROM
product_dimension_value_ids,product_string_ids
");

(现在已经测试过了)

关于php - PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 和准备语句中的多个删除语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2175931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com