Используя PHP / MySQLi, я хотел извлечь некоторые данные в массив. Данные составляют несколько мегабайт:
Код для получения дампа таблицы этих данных:
error_reporting(E_ALL); $q = "SELECT * FROM mytable"; if (!$result = $mysqli->query($q)) { echo "Error: Our query failed to execute and here is why: \n"; echo "Query: " . $query . "\n"; echo "Errno: " . $mysqli->errno . "\n"; echo "Error: " . $mysqli->error . "\n"; return $ret; } if ($result->num_rows === 0) { $ret = 0; return $ret; } $ret = array(); while($row = $result->fetch_array()){ array_push($ret, $row); } echo mb_strlen(serialize((array)$ret), '8bit');
При выполнении следующего кода я получил:
Но он сказал, что пытался выделить 28672 байта, который нигде не близок к пределу. Почему это?
Подумайте об этом так.
У вас есть 100 долларов. Вы идете в магазин конфет и решаете купить 200 $ 1 конфеты, один за другим (ваш цикл).
Первые 100 покупок пройдут, но в следующий раз, когда вы попробуете купить $ 1 конфету, вам скажут: «Вы пытались потратить доллар, но уже потратили 100 долларов».
PHP сообщает объем памяти, который ваша последняя инструкция пыталась использовать. В этом случае это, вероятно, array_push($ret, $row);
вызов.