我正在尝试在PHP / PDO for MySQL中实现一些嵌套的set操作。进行插入操作后(如此处所述:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/)由于错误HY000 / 2014,我无法执行另一个查询:
其他时无法执行查询 无缓冲的查询是活动的。 考虑使用 PDOStatement对象::使用fetchall()。 或者,如果您的代码是唯一的 永远不会对着mysql运行,你 可以通过设置启用查询缓冲 PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY 属性。
代码产生错误(错误在代码底部的最后一个“SELECT * FROM tree”处抛出):
// insert a node into a nested set as child
$queryParts = array(
'LOCK TABLE tree WRITE',
'SELECT @myLeft:= lft FROM tree WHERE id = :parentuid',
'UPDATE tree SET rgt = rgt + 2 WHERE rgt > @myLeft',
'UPDATE tree SET lft = lft + 2 WHERE lft > @myLeft',
'UPDATE tree SET lft = @myLeft + 1, rgt = @myLeft + 2 WHERE id = :childuid',
'UNLOCK TABLES',
);
$parentuid = $parent->getUid();
$childuid = $node->getUid();
$stmt = self::$connection->prepare(join(";\n", $queryParts) . ';') or die (print_r(self::$connection->errorCode(),1));
$stmt->bindParam(':parentuid', $parentuid);
$stmt->bindParam(':childuid', $childuid);
$res = $stmt->execute() or die (print_r($stmt->errorCode(),1));
// that does not help :(
if ($res) {
do {
$stmt->fetchAll(); // empty array
$stmt->closeCursor();
} while($stmt->nextRowset());
}
// is not executed
$rset = self::$connection->query('SELECT * FROM tree')
or die (print_r(self::$connection->errorInfo(),1)); // that kills the code
while($row = $rset->fetchObject()) {
var_dump($row);
}
在我看来,没有开放查询。 如何解决此错误?目前我被卡住了,所以任何帮助都会受到高度赞赏:)
答案 0 :(得分:0)
如果查询包含多个用分号分隔的语句并以无缓冲模式执行,则会发生错误“在其他无缓冲查询处于活动状态时无法执行查询”。
解决方案是: