我有一个我正在制作的 PHP 项目,但是我已经走到了死胡同,因为一行导致脚本出错,说内存限制已经耗尽。
有问题的行是方法的一部分,如下所示:
public function query_all($query)
{
if (function_exists('mysqli_fetch_all')) # Compatibility layer with PHP < 5.3
$res = mysqli_fetch_all($this->query($query));
else
for ($res = array(); $tmp = mysqli_fetch_array($this->query($query));) $res[] = $tmp;
return $res;
}
此函数是名为 Db 的类的一部分,错误所在的行是 for 循环所在的行:
for ($res = array(); $tmp = mysqli_fetch_array($this->query($query));) $res[] = $tmp;
这个函数在我的代码中只被调用一次,在 else 语句的顶部:
do
{
$id = rand(1000000, 9999999);
if (!Util::in_array_r($id, $db->query_all('SELECT * FROM tickets')))
{
break;
}
}
while (true);
$emailsubject = $db->escape($emailsubject);
$emailbody = $db->escape($emailbody);
$from = $db->escape($from);
$db->query("INSERT INTO tickets VALUES ($id, '$emailsubject', '$emailbody', '$from')");
foreach ($config['staff_emails'] as $email)
{
mail($email, "[$id] [NEW TICKET] $emailsubject", $emailbody, "Reply-to: $to");
}
我不明白它为什么这样做——它从来没有习惯过,我唯一改变的是让所有 SQL 查询工作:/
有谁知道为什么会这样?for 循环可以无休止地运行吗?数据库只包含一行,所以我不明白它是怎么做到的,
谢谢,利亚姆