Я пытаюсь получить данные из базы данных и сохранить их в файл 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?
В дополнение к ответу Марка Бейкера вот временное решение для потоковой передачи на 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
) вам все равно не хватит памяти.
Других решений пока нет …