Mysql
 sql >> Base de données >  >> RDS >> Mysql

Qu'est-ce qui cause l'erreur PDO Impossible d'exécuter les requêtes alors que d'autres requêtes non tamponnées sont actives ?

Curieusement, les packages PHP fournis par Ubuntu ne sont pas compilés avec le Pilote natif MySQL , mais avec l'ancien libmysqlclient à la place (testé sur Ubuntu 13.10 avec les packages par défaut) :

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

Votre scénario de test ("Edit 4", avec setAttribute(MYSQL_ATTR_USE_BUFFERED_QUERY, true) ) fonctionne comme prévu avec PHP 5.5.3 compilé manuellement avec mysqlnd avec :

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

... mais échoue avec :

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

Il est assez étrange qu'il n'échoue que si la première instruction est exécutée deux fois ; cela doit être un bogue dans le libmysqlclient chauffeur.

Les deux pilotes échouent comme prévu lorsque MYSQL_ATTR_USE_BUFFERED_QUERY est false . Votre bon sens déjà démontré pourquoi ce comportement est attendu, quel que soit le nombre de lignes dans le jeu de résultats.

Mike a découvert que la solution actuelle consiste à installer le php5-mysqlnd package au lieu du php5-mysql recommandé par Canonical .