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.