Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Pegando 190k linhas do MySQL usando PHP, página em branco? Memória ou buffer?


Colocando Kohana de lado, porque eu nunca usei, o que você está fazendo atualmente é basicamente isso:
$result = mysql_query(...);
$data   = array();
while ($row = mysql_fetch_assoc($result)) {
    $data[] = $row;
}

Ou seja você está obtendo todos os dados do MySQL com mysql_fetch_assoc e armazená-los todos na memória do PHP colocando-os em $data . Isso significa que o PHP precisa ter memória suficiente para armazenar todos os dados de uma vez, o que não tem.

O que você quer fazer é buscar uma linha de resultado do MySQL, fazer algo com ela e passar para a próxima linha sem armazenar tudo na memória de uma só vez:
$result = mysql_query(...);
while ($row = mysql_fetch_assoc($result)) {
    echo $row['foo'];
}

E não, por favor, não use a API mysql_ obsoleta, é apenas o maior exemplo de denominador comum aqui. Além disso, deve haver uma maneira melhor de fazer o que você quiser do que tentar buscar e gerar 190.000 linhas de uma só vez.