Ding ding ding!
Quando si connette a MySQL, PHP utilizza query bufferizzate . Questo è vero indipendentemente dal metodo che stai usando per connetterti. Quando si utilizzano query memorizzate nel buffer, l'intero set di risultati viene recuperato immediatamente invece di essere recuperato quando lo chiedi. Questo è solitamente buono per le prestazioni, poiché ci sono meno viaggi di andata e ritorno.
Ma come tutto in PHP, c'è un problema. Come notato nella pagina di buffering:
Stai usando PHP 5.3, il che significa che ci sono buone probabilità che tu stia usando mysqlnd.
Ti consigliamo di disattivare le query nel buffer qui. È fatto in modo diverso in ogni interfaccia PHP per MySQL:
- Per PDO, dovrai impostare il
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
attributo afalse
. - Per mysqli, devi passare il
MYSQLI_USE_RESULT
costante allaquery
metodo. - Per mysql, devi chiamare
mysql_unbuffered_query
invece dimysql_query
.
Tutti i dettagli e gli esempi sono sulla pagina.
Ho capito una query senza buffer grossa!
devi chiudere correttamente l'handle dell'istruzione e liberare il set di risultati prima di eseguire un'altra query:
- In PDO, questo significa chiamare
closeCursor
sull'handle dell'istruzione. - In mysqli, questo significa chiamare
free_result
sull'handle dell'istruzione ofree
sull'handle del risultato, a seconda di cosa stai lavorando. - In mysql, questo significa chiamare
mysql_free_result
In caso contrario, verrà generato un errore.