Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was verursacht den PDO-Fehler Abfragen können nicht ausgeführt werden, während andere ungepufferte Abfragen aktiv sind?

Seltsamerweise werden die von Ubuntu bereitgestellten PHP-Pakete nicht mit dem Nativer Mysql-Treiber , aber mit dem alten libmysqlclient stattdessen (getestet auf Ubuntu 13.10 mit Standardpaketen):

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

Ihr Testfall ("Edit 4", mit setAttribute(MYSQL_ATTR_USE_BUFFERED_QUERY, true) ) funktioniert wie erwartet mit PHP 5.5.3 manuell kompiliert mit mysqlnd mit:

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

... aber schlägt fehl mit:

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

Es ist ziemlich seltsam, dass es nur fehlschlägt, wenn die erste Anweisung zweimal ausgeführt wird; das muss ein Fehler im libmysqlclient sein Fahrer.

Beide Treiber schlagen wie erwartet fehl, wenn MYSQL_ATTR_USE_BUFFERED_QUERY ist false . Dein gesunder Menschenverstand wurde bereits bewiesen warum dies das erwartete Verhalten ist, unabhängig von der Anzahl der Zeilen in der Ergebnismenge.

Mike hat herausgefunden, dass die aktuelle Problemumgehung die Installation von php5-mysqlnd ist Paket anstelle des von Canonical empfohlenen php5-mysql .