Ding ding ding!
Ao se conectar ao MySQL, o PHP gosta de usar consultas em buffer . Isso é verdade independentemente do método que você está usando para se conectar. Ao usar consultas em buffer, todo o conjunto de resultados é buscado imediatamente em vez de ser buscado quando você pergunta. Isso é geralmente bom para o desempenho, pois há menos viagens de ida e volta.
Mas como tudo em PHP, há uma pegadinha. Conforme observado na página de buffer:
Você está usando o PHP 5.3, o que significa que há uma boa chance de você estar usando o mysqlnd.
Você vai querer desativar as consultas em buffer aqui. É feito de forma diferente em cada interface PHP para MySQL:
- Para PDO, você precisará definir o
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
atributo parafalse
. - Para mysqli, você precisa passar o
MYSQLI_USE_RESULT
constante para aquery
método. - Para mysql, você precisa chamar
mysql_unbuffered_query
em vez demysql_query
.
Detalhes completos e exemplos estão na página.
Pegadinha de consulta sem buffer!
Você deve feche corretamente o handle da instrução e libere o conjunto de resultados antes de emitir outra consulta:
- No PDO, isso significa chamar
closeCursor
no identificador da instrução. - No mysqli, isso significa chamar
free_result
no identificador da instrução oufree
na alça de resultado, dependendo do que você está trabalhando. - No mysql, isso significa chamar
mysql_free_result
Não fazer isso resultará em um erro.