sql >> Base de Datos >  >> RDS >> Mysql

Tomando 190k filas de MySQL usando PHP, ¿página en blanco? ¿Memoria o búfer?

Dejando a un lado a Kohana, porque nunca lo he usado, lo que estás haciendo actualmente es básicamente esto:

$result = mysql_query(...);
$data   = array();
while ($row = mysql_fetch_assoc($result)) {
    $data[] = $row;
}

Es decir. está obteniendo todos los datos de MySQL con mysql_fetch_assoc y almacenarlos todos en la memoria de PHP introduciéndolos en $data . Eso significa que PHP necesita tener suficiente memoria para almacenar todos los datos a la vez, lo cual no tiene.

Lo que quiere hacer es obtener una fila de resultados de MySQL, hacer algo con ella y luego pasar a la siguiente fila sin almacenar todo en la memoria a la vez:

$result = mysql_query(...);
while ($row = mysql_fetch_assoc($result)) {
    echo $row['foo'];
}

Y no, por favor no use la API mysql_ en desuso, es solo el ejemplo del denominador común más grande aquí. Además, debe haber una mejor manera de hacer lo que quiera que intentar obtener y generar 190 000 filas a la vez.