¡Ding ding ding!
Cuando se conecta a MySQL, a PHP le gusta usar consultas en búfer . Esto es cierto independientemente del método que esté utilizando para conectarse. Cuando se utilizan consultas almacenadas en búfer, el conjunto de resultados completo se recupera inmediatamente en lugar de recuperarse cuando lo solicita. Esto es normalmente bueno para el rendimiento, ya que hay menos viajes de ida y vuelta.
Pero como todo en PHP, hay un truco. Como se indica en la página de almacenamiento en búfer:
Está utilizando PHP 5.3, lo que significa que es muy probable que esté utilizando mysqlnd.
Querrá desactivar las consultas almacenadas aquí. Se hace de manera diferente en cada interfaz de PHP a MySQL:
- Para PDO, deberá configurar
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
atributo afalse
. - Para mysqli, debe pasar el
MYSQLI_USE_RESULT
constante a laquery
método. - Para mysql, debe llamar a
mysql_unbuffered_query
en lugar demysql_query
.
Los detalles completos y los ejemplos están en la página.
¡Te pillé una gran consulta sin búfer!
debes cierre correctamente el identificador de declaración y libere el conjunto de resultados antes de emitir otra consulta:
- En PDO, esto significa llamar a
closeCursor
en el identificador de declaración. - En mysqli, esto significa llamar a
free_result
en el identificador de declaración ofree
en el identificador de resultados, según con lo que esté trabajando. - En mysql, esto significa llamar a
mysql_free_result
De lo contrario, se producirá un error.