如何防止从具有PDO的表中将所有数据拉入内存?

时间:2011-05-10 15:11:38

标签: iterator pdo

假设我有一个包含10,000行产品数据的表格,我想构建一个包含表格中所有数据的XML Feed。

显然我不想立刻将所有产品都放入内存。那么,我怎么能防止吃掉所有服务器的内存?使用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 :(得分:0)

除了你错过了“&gt;”在while语句中关闭,你需要告诉它获取一个类

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

我个人使用关联数组,不要忘记在最后关闭语句 - 所以

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

但我认为这是个人偏好。