Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Co powoduje błąd PDO Nie można wykonać zapytań, gdy inne niebuforowane zapytania są aktywne?

Co dziwne, pakiety PHP dostarczane przez Ubuntu nie są kompilowane z Natywny sterownik Mysql , ale ze starym libmysqlclient zamiast tego (testowane na Ubuntu 13.10 z domyślnymi pakietami):

<?php
echo $dbh->getAttribute(PDO::ATTR_CLIENT_VERSION); // prints "5.5.35", i.e MySQL version
// prints "mysqlnd (...)" when using mysqlnd

Twój przypadek testowy („Edytuj 4”, z setAttribute(MYSQL_ATTR_USE_BUFFERED_QUERY, true) ) działa zgodnie z oczekiwaniami z PHP 5.5.3 ręcznie skompilowanym za pomocą mysqlnd z:

./configure --with-pdo-mysql=mysqlnd # default driver since PHP v5.4

... ale nie powiedzie się z:

bash> ./configure --with-pdo-mysql=/usr/bin/mysql_config

To dość dziwne, że nie powiedzie się tylko wtedy, gdy pierwsza instrukcja zostanie wykonana dwukrotnie; to musi być błąd w libmysqlclient kierowca.

Oba sterowniki nie działają zgodnie z oczekiwaniami, gdy MYSQL_ATTR_USE_BUFFERED_QUERY jest false . Twój zdrowy rozsądek już zademonstrował dlaczego jest to oczekiwane zachowanie, niezależnie od liczby wierszy w zestawie wyników.

Mike dowiedział się, że aktualnym obejściem jest instalacja php5-mysqlnd pakiet zamiast zalecanego przez firmę Canonical php5-mysql .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. varchar(255) vs mały tekst/tinyblob i varchar(65535) vs obiekt BLOB/tekst

  2. Zestawienie MySQL do przechowywania wielojęzycznych danych w nieznanym języku

  3. Kiedy mam wywołać bind_param, jeśli używam przygotowanych instrukcji MySQLi w pętli?

  4. nie udało się otworzyć strumienia:Brak takiego pliku lub katalogu w

  5. Zestaw znaków django z dziwnością MySQL