Mysql
 sql >> Base de données >  >> RDS >> Mysql

Récupération de 190 000 lignes de MySQL à l'aide de PHP, page blanche ? Mémoire ou tampon ?

Mis à part Kohana, car je ne l'ai jamais utilisé, ce que vous faites actuellement est essentiellement ceci :

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

C'est à dire. vous obtenez toutes les données de MySQL avec mysql_fetch_assoc et stockez-les tous dans la mémoire de PHP en le poussant dans $data . Cela signifie que PHP doit disposer de suffisamment de mémoire pour stocker toutes les données à la fois, ce qui n'est pas le cas.

Ce que vous voulez faire, c'est récupérer une ligne de résultat de MySQL, en faire quelque chose, puis passer à la ligne suivante sans tout stocker en mémoire à la fois :

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

Et non, s'il vous plaît, n'utilisez pas l'API mysql_ obsolète, c'est juste le plus grand exemple de dénominateur commun ici. De plus, il doit y avoir un meilleur moyen de faire tout ce que vous voulez que d'essayer de récupérer et de générer 190 000 lignes à la fois.