Объем памяти исчерпан при помещении данных в массив

Я пытаюсь получить данные из базы данных и сохранить их в файл JSON.
Сценарий ниже работает нормально, но большие Datatables не работают:

# SELECT Data from Table
$query = "SELECT `Row1`,
`Row2`,
`Row3`
FROM   `Table`";
$result = $mysqli->query( $query );

# Declare array
$data = array();

# Put Data into array
while ( $row = $result->fetch_assoc() ) {
$data[] = $row;
}

# Put Data into JSON
$JSONData = json_encode( $data, JSON_PRETTY_PRINT );

Но большие таблицы не будут работать:
Неустранимая ошибка: допустимый объем памяти 104857600 байт исчерпан.

Ошибка происходит в сегменте «Поместить данные в массив» (см. Код выше).

Есть ли другие способы получить данные в JSON?

0

Решение

В дополнение к ответу Марка Бейкера вот временное решение для потоковой передачи на json:

# SELECT Data from Table
$query = "SELECT `Row1`,
`Row2`,
`Row3`
FROM   `Table`";
$result = $mysqli->query( $query );

header("Content-Type: application/json");
echo "[";
# Put Data into array
$first = true;
while ( $row = $result->fetch_assoc() ) {
echo (!$first?",":"").json_encode($row);
$first = false;
}
echo "]";
die();

Теперь вот подвох. Вы не можете поместить данные в массив или строку, вы можете только передать их. Кроме того, если вы используете буферизацию вывода (с ob_start) вам все равно не хватит памяти.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector