Я пытаюсь реализовать некоторые вложенные операции над множествами в PHP / PDO для MySQL. После выполнения операции вставки (как указано здесь: 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);
}
По моему мнению, нет открытого запроса. Как решить эту ошибку? В настоящее время я застрял, поэтому любая помощь будет принята с благодарностью:)