sql >> Database teknologi >  >> RDS >> Mysql

Rammer PHP-hukommelsesgrænsen uventet med en enkelt PDO-forespørgsel?

Ding ding ding!

Når du opretter forbindelse til MySQL, kan PHP lide at bruge buffede forespørgsler . Dette er sandt, uanset hvilken metode du bruger til at oprette forbindelse. Når du bruger bufferforespørgsler, hentes hele resultatsættet med det samme i stedet for at blive hentet, når du spørger. Dette er normalt godt for ydeevnen, da der er færre rundturer.

Men som alt andet i PHP, er der noget. Som nævnt på buffersiden:

Du bruger PHP 5.3, hvilket betyder, at der er en god chance for, at du bruger mysqlnd.

Du vil gerne slå bufferforespørgsler fra her. Det gøres anderledes i hver PHP-grænseflade til MySQL:

  • For PDO skal du indstille PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribut til false .
  • For mysqli skal du bestå MYSQLI_USE_RESULT konstant til query metode.
  • For mysql skal du kalde mysql_unbuffered_query i stedet for mysql_query .

Alle detaljer og eksempler er på siden.

Big fed unbuffered forespørgsel gotcha!

Du skal luk sætningshåndtaget korrekt, og frigør resultatsættet, før du udsender en anden forespørgsel:

  • I PDO betyder det, at du kalder closeCursor på erklæringshåndtaget.
  • I mysqli betyder det, at du kalder free_result på erklæringshåndtaget eller free på resultathåndtaget, alt efter hvad du arbejder med.
  • I mysql betyder det, at du kalder mysql_free_result

Undladelse af at gøre dette vil resultere i en fejl.




  1. Oracle PL/SQL-strengsammenligningsproblem

  2. er der en PRODUKT funktion ligesom der er en SUM funktion i Oracle SQL?

  3. databaseforbindelse mislykkes efter oprettelse af jar-fil

  4. Vigtigheden af ​​varchar-længde i MySQL-tabel