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 tilfalse
. - For mysqli skal du bestå
MYSQLI_USE_RESULT
konstant tilquery
metode. - For mysql skal du kalde
mysql_unbuffered_query
i stedet formysql_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 ellerfree
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.