Ding ding ding!
Podczas łączenia się z MySQL, PHP lubi używać buforowanych zapytań . Dzieje się tak niezależnie od metody używanej do połączenia. Podczas korzystania z zapytań buforowanych cały zestaw wyników jest pobierany natychmiast, a nie na żądanie. To jest zazwyczaj dobre pod względem wydajności, ponieważ jest mniej podróży w obie strony.
Ale jak wszystko w PHP, jest pewien problem. Jak wspomniano na stronie buforowania:
Używasz PHP 5.3, co oznacza, że istnieje duża szansa, że używasz mysqlnd.
Tutaj będziesz chciał wyłączyć buforowane zapytania. W każdym interfejsie PHP do MySQL robi się to inaczej:
- W przypadku PDO musisz ustawić
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
atrybut dofalse
. - Dla mysqli musisz przekazać
MYSQLI_USE_RESULT
stała doquery
metoda. - W przypadku mysql musisz zadzwonić na
mysql_unbuffered_query
zamiastmysql_query
.
Pełne szczegóły i przykłady znajdują się na stronie.
Mam duże, niebuforowane zapytanie!
musisz poprawnie zamknij uchwyt instrukcji i zwolnij zbiór wyników przed wysłaniem kolejnego zapytania:
- W PDO oznacza to wywołanie
closeCursor
na uchwycie wyciągu. - W mysqli oznacza to wywołanie
free_result
na uchwycie wyciągu lubfree
na uchwycie wyniku, w zależności od tego, z czym pracujesz. - W mysql oznacza to wywołanie
mysql_free_result
Niewykonanie tego spowoduje błąd.