Intereting Posts
Переиндексирование массива после фильтрации в php? Получить данные из базы данных mysql, используя php и jquery ajax PHP. Как открыть файлы и прочитать их, а затем написать новые с помощью «x» строк в файле? Как получить доступ к свойству класса родителя, если текущий класс был создан в родительском Войдите в систему с помощью curl и перейдите на другую страницу Как установить Telegram bot webhook? Почему PHP не автоматически вызывает родительские конструкторы? Необходимая информация о структуре базы данных PHP Сохранить форму в изображение или PDF с помощью стиля Запуск нескольких запросов в MySQL без использования подзапроса Ошибка синтаксиса статического свойства PHP OOP Php, манипуляция с датами? «Вертикальное» соответствие регулярных выражений в ASCII «изображении» Вы только запускаете htmlspecialchars () на выходе или есть другие функции, которые вы также делаете? PHP: Почему не exec () возвращает результат?

PDO «Необрученное исключение» PDOException ».. Невозможно выполнить запросы, в то время как другие небуферизованные запросы активны. Рассмотрим использование PDOStatement :: fetchAll (). "

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

Неустранимая ошибка: исключить исключение «PDOException» с сообщением «SQLSTATE [HY000]: общая ошибка: 2014 Не удается выполнить запросы, в то время как другие небуферизованные запросы активны. Рассмотрим использование PDOStatement :: fetchAll (). Кроме того, если ваш код будет работать только с mysql, вы можете включить буферизацию запросов, установив атрибут PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY. '

Первое, что странно, заключается в том, что я не получаю сообщение об ошибке на моем localhost (wampserver), но я получаю его на своем веб-сервере. Версия php на моем localhost – 5.3.10, а на моем веб-сервере – 5.3.13.

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

С учетом сказанного, я обнаружил, что изменение одного из моих запросов на fetchAll вместо fetch исправляет проблему, но это просто не делает, потому что я знаю, что все возвращаемые строки читаются. Когда я использовал fetchAll для запроса (он делается в цикле), я распечатывал массив каждый цикл, и только один элемент был в массиве для каждого запроса в цикле.

Еще одна информация. Это не запрос, который я изменил на fetchAll (что заставляет fetchAll уйти), которая вызывает ошибку PDO, в моем php-файле есть другой запрос, который выдает ошибку. Мой файл в основном такой:

 ... code ... query 1 ... code ... loop query 2 end loop ... code ... query 3 

Если я закомментирую запрос 3, ошибки не будет. Если я прокомментирую или изменим на fetchAll , запрос 2, ошибки не будет. запрос 1 не имеет никакого влияния.

Я также хотел бы добавить, что я попытался добавить LIMIT 1 ко всем запросам на странице (в то же время), и ошибка все еще там. Я думаю, это доказывает, что в буфере нет непрочитанных данных, верно?

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

 $stmt = $this->db->prepare('SELECT ... :par LIMIT 1'); makeQuery($stmt, array(':par' => $var)); $row = $stmt->fetch(PDO::FETCH_ASSOC); $stmt = $this->db->prepare('SELECT ... :par LIMIT 1'); for loop makeQuery($stmt, array(':par' => $var)); $row2 = $stmt->fetch(PDO::FETCH_ASSOC); ... [use row2] ... end for loop $stmt = $this->db->prepare('SELECT ... :par LIMIT 1'); makeQuery($stmt, array(':par' => $var)); $row3 = $stmt->fetch(PDO::FETCH_ASSOC); 

Вот makeQuery() .

 /************************************************************************************************************** * Function: makeQuery * * Desc: Makes a PDO query. * * Pre conditions: The statement/query and an array of named parameters (may be empty) must be passed. * * Post conditions: The PDO query is executed. Exceptions are caught, displayed, and page execution stopped. * **************************************************************************************************************/ function makeQuery($stmt, $array, $errMsg = '') { try { $stmt->execute($array); } catch (PDOException $e) { print $errMsg != ''?$errMsg:"Error!: " . $e->getMessage() . "<br/>"; die(); } } 

Спасибо за вашу помощь!

EDIT: Я также попытался сделать следующее после запроса 2 (так как это, кажется, является источником проблемы:

 $row2 = $stmt->fetch(PDO::FETCH_ASSOC); var_dump($row2); 

Выход был:

 bool(false) 

Я наткнулся на ошибку PDO?

Solutions Collecting From Web of "PDO «Необрученное исключение» PDOException ».. Невозможно выполнить запросы, в то время как другие небуферизованные запросы активны. Рассмотрим использование PDOStatement :: fetchAll (). ""

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

у вас, вероятно, есть другие утверждения, в которых вы не полностью «извлекли, пока ошибка не завершилась». Да, я вижу, что вы выбрали, пока изъятие не получилось для одного из операторов.

также, см. closecursor ()

 $sql = "select * from test.a limit 1"; $stmt = $dbh->prepare($sql); $stmt->execute(array()); $row = $stmt->fetch(); $stmt->closeCursor(); 

или

 $sql = "select * from test.a limit 1"; $stmt = $dbh->prepare($sql); $stmt->execute(array()); list($row) = $stmt->fetchAll(); //tricky 

После нескольких дней борьбы с этой проблемой я наконец обнаружил, что это сработало для меня:

 $db = new PDO ($cnstring, $user, $pwd); $db->setAttribute (PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);