假设我有一个包含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。
答案 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()
但我认为这是个人偏好。