Как предотвратить вытягивание всех данных в память из таблицы с PDO? - PullRequest
0 голосов
/ 10 мая 2011

Допустим, у меня есть таблица, содержащая 10000 строк данных о продукте, и я хочу создать XML-ленту, содержащую все данные в таблице.

Очевидно, что я не хочу загружать все продукты в память водин раз.Итак, как я могу предотвратить потребление всей памяти моего сервера?С помощью PDO я могу перебирать все записи следующим образом:

$fp = fopen('feed.xml', 'w');

// write some XML data
// ..

$statement = $db->prepare("SELECT * FROM products");
$statement->execute();

while ($row = $statement->fetch()) {
    fputs($fp, '<product>' . $row->name . '</product>');
}

// write some more XML data
// ..

fclose($fp);

Собирается ли этот метод одновременно извлекать все продукты в память, или PDO предоставляет какую-то закулисную функцию разбивки на страницы?Если нет, что я могу сделать?

Должен заметить, что я использую MySQL.

1 Ответ

0 голосов
/ 12 мая 2011

Кроме того, что вы пропустили ">" в операторе while, и вам нужно сказать ему, чтобы он выбирал класс

while ($row = $statement->fetch(PDO::FETCH_CLASS)) {

лично для использования ассоциативного массива и не забудьте закрытьзаявление в конце - так

while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
    fputs($fp, '<product>' . $row("name") . '</product>');
}
$statement->closeCursor()

Но я думаю, что это личное предпочтение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...