Intereting Posts

PDO Невозможно выполнить запросы, в то время как другие небуферизованные запросы активны

Я знаю, что это должно быть простым решением, и я частично понимаю, почему я получаю эту ошибку, но не знаю, как ее исправить. Я просмотрел документы, но не могу найти решение, отличное от использования параметров буферизованных запросов. Я тоже это пробовал, но это не работает.

Ошибка: PDO Не удается выполнить запросы, в то время как другие небуферизованные запросы активны

Ошибка исходит из строки, где я строю массив $ result.

foreach($phones as $phone) { $stmt = db::getInstance()->prepare("CALL phones(:phone)"); $stmt->bindParam(':phone', $phone, PDO::PARAM_INT, 10); $stmt->execute(); $result[] = db::getInstance()->query("SELECT @phone;")->fetchAll(PDO::FETCH_ASSOC); } 

Вы должны освободить свое соединение, используя метод PDOStatement :: closeCursor ()

http://www.php.net/manual/en/pdostatement.closecursor.php

я верю

 foreach($phones as $phone) { $stmt = db::getInstance()->prepare("CALL phones(:phone)"); $stmt->bindParam(':phone', $phone, PDO::PARAM_INT, 10); $stmt->execute(); $stmt->closeCursor() $result[] = db::getInstance()->query("SELECT @phone;")->fetchAll(PDO::FETCH_ASSOC); } 

должен сделать это за вас

Я столкнулся с этой проблемой из-за ошибки в моем предложении PDO connection. Я пытался изменить часовой пояс при подключении:

 PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8; SET time_zone = '$timezone';" 

Я изменил его на:

 PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8, time_zone = '$timezone';" 

И все получилось отлично.

Я просто столкнулся с этой проблемой, и проблема оказалась в использовании сложных запросов. Вышеупомянутое решение не решило проблему.

У нас был этот запрос, запущенный прямо перед тем, который вызвал ошибку:

 return $this->fquery(' SELECT @follow_id:=COALESCE(MAX(follow_id) + 1, 0) FROM sync_delete_value; INSERT INTO sync_delete_value (...) VALUES (%d, @follow_id, %d, "%s")', $val1, $val2, $val3 ); 

Когда я изменил это, все возобновилось, как обычно:

 $followId = $this->fquery(' SELECT @follow_id:=COALESCE(MAX(follow_id) + 1, 0) FROM sync_delete_value' ); return $this->fquery(' INSERT INTO sync_delete_value (...) VALUES (%d, %d, %d, "%s")', $val1, $followId, $val2, $val3 

);

Это своего рода псевдокод, но вы понимаете.

Если $ stmt-> closeCursor () не работает для вас (это не для меня), вы можете просто отключить переменную $ stmt, чтобы освободить вверх курсор, например:

 foreach($phones as $phone) { $stmt = db::getInstance()->prepare("CALL phones(:phone)"); $stmt->bindParam(':phone', $phone, PDO::PARAM_INT, 10); $stmt->execute(); unset($stmt); $result[] = db::getInstance()->query("SELECT @phone;")->fetchAll(PDO::FETCH_ASSOC); } с foreach($phones as $phone) { $stmt = db::getInstance()->prepare("CALL phones(:phone)"); $stmt->bindParam(':phone', $phone, PDO::PARAM_INT, 10); $stmt->execute(); unset($stmt); $result[] = db::getInstance()->query("SELECT @phone;")->fetchAll(PDO::FETCH_ASSOC); }