2
我试图使用从两个(临时)表中删除一个准备好的声明:PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY和多个DELETE语句在准备好的声明
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语句准备到一个像这样的单个语句中?从性能角度来看,它肯定是有意义的,尤其是对于大量的查询,它们可以在临时表上工作,然后只返回最终结果集。
感谢。很遗憾,我不能将SQL语句捆绑在一起,因为它会限制我使用其他的东西,但是DELETE语法提示有帮助。 任何想法PDO如何处理存储过程呢?他们不是基本上只是收集的声明? – FlintZA 2010-02-01 11:14:26
不,看起来像从多表中删除语法毕竟是无效的。 – FlintZA 2010-02-01 11:20:33
urgs,下次尝试。似乎工作,在MySQL 5.1.37 – VolkerK 2010-02-01 13:59:00