Ding ding ding!
När du ansluter till MySQL gillar PHP att använda buffrade frågor . Detta gäller oavsett vilken metod du använder för att ansluta. När du använder buffrade frågor, hämtas hela resultatuppsättningen omedelbart istället för att hämtas när du frågar. Detta är vanligtvis bra för prestanda, eftersom det är färre tur och retur.
Men som allt i PHP, det finns en gotcha. Som noterats på buffringssidan:
Du använder PHP 5.3, vilket betyder att det finns en god chans att du använder mysqlnd.
Du vill stänga av buffrade frågor här. Det görs annorlunda i alla PHP-gränssnitt till MySQL:
- För PDO måste du ställa in
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
attribut tillfalse
. - För mysqli måste du skicka
MYSQLI_USE_RESULT
konstant tillquery
metod. - För mysql måste du anropa
mysql_unbuffered_query
istället förmysql_query
.
Fullständiga detaljer och exempel finns på sidan.
Stor fet obuffrad fråga gotcha!
Du måste stäng satshandtaget ordentligt och frigör resultatuppsättningen innan du skickar en annan fråga:
- I PDO betyder det att man anropar
closeCursor
på utdragshandtaget. - I mysqli betyder det att man anropar
free_result
på meddelandehandtaget ellerfree
på resultathandtaget, beroende på vad du arbetar med. - I mysql betyder det att man anropar
mysql_free_result
Om du inte gör detta kommer det att resultera i ett fel.