Ding ding ding !
Lors de la connexion à MySQL, PHP aime utiliser des requêtes tamponnées . Cela est vrai quelle que soit la méthode que vous utilisez pour vous connecter. Lors de l'utilisation de requêtes mises en mémoire tampon, l'intégralité du jeu de résultats est extraite immédiatement au lieu d'être extraite lorsque vous le demandez. C'est généralement bon pour les performances, car il y a moins d'allers-retours.
Mais comme tout en PHP, il y a un piège. Comme indiqué sur la page de mise en mémoire tampon :
Vous utilisez PHP 5.3, ce qui signifie qu'il y a de fortes chances que vous utilisiez mysqlnd.
Vous voudrez désactiver les requêtes mises en mémoire tampon ici. C'est fait différemment dans chaque interface PHP vers MySQL :
- Pour PDO, vous devrez définir le
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
attribut àfalse
. - Pour mysqli, vous devez passer le
MYSQLI_USE_RESULT
constante à laquery
méthode. - Pour mysql, vous devez appeler
mysql_unbuffered_query
au lieu demysql_query
.
Tous les détails et exemples sont sur la page.
Gros gros problème de requête sans tampon !
Vous devez fermez correctement le descripteur d'instruction et libérez le jeu de résultats avant d'émettre une autre requête :
- Dans PDO, cela signifie appeler
closeCursor
sur le descripteur d'instruction. - Dans mysqli, cela signifie appeler
free_result
sur le handle d'instruction oufree
sur la poignée de résultat, en fonction de ce avec quoi vous travaillez. - Dans mysql, cela signifie appeler
mysql_free_result
Si vous ne le faites pas, une erreur se produira.