sql >> Databasteknik >  >> RDS >> Mysql

Har du oväntat träffat PHP-minnesgränsen med en enda PDO-fråga?

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 till false .
  • För mysqli måste du skicka MYSQLI_USE_RESULT konstant till query metod.
  • För mysql måste du anropa mysql_unbuffered_query istället för mysql_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 eller free 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.




  1. Hur man använder Coalesce Function i Oracle

  2. Hur man får aktuellt Auto_Increment-sekvensnummer för MySQL / MariaDB-tabell

  3. UPPDATERA flera tabeller i MySQL med LEFT JOIN

  4. Returnera det DISTINKT första tecknet i ett fält (MySQL)