我将旧系统转换为使用PDO。 编辑:忘记添加错误: 致命错误:允许的内存大小为33554432字节耗尽
我在这里遇到的问题是这个功能:
原始代码:
function visitors_get_data() {
// select
$result = mysql_query("SELECT `ip`, `value` FROM `visitors`");
while ($row = mysql_fetch_assoc($result)) {
$data[] = $row;
}
if (isset($data)) return $data;
else return false;
}
这是我的编辑:
function visitors_get_data() {
$dbc1 = new Db();
// select
$sth = $dbc1->PDOPrepare("SELECT `ip`, `value` FROM `visitors`");
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
while ($row = $result) {
$data[] = $row;
}
if (isset($data)) return $data;
else return false;
}
感谢您的帮助!
答案 0 :(得分:1)
问题出在这些方面:
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
while ($row = $result) {
$data[] = $row;
}
您正在分配$result
,然后在while循环中使用该值。发生的事情是,然后你一遍又一遍地为$row
分配相同的值,直到你的内存不足为止。
要解决此问题,您只需移动作业:
while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
$data[] = $row;
}
这将遍历数据库,将每一行分配到$data
。
您也可以使用fetchAll
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
在这种情况下,所有内容都已分配给$result
,因此您根本不需要while循环。如果您查看man page,可以看到fetchAll
返回数据的格式 - 可能与您期望的完全不同。