gpt4 book ai didi

php - php中的mysql查询循环

转载 作者:行者123 更新时间:2023-11-29 13:15:28 25 4
gpt4 key购买 nike

当我运行此脚本时,apache 使用所有可用内存并且服务器变得无响应:

$db = new mysql();
$result = $db->query($sql);
while($row = $db->query($sql)) ...

为什么PHP限制不限制apache进程? PHP 与 apache itk 一起作为 mod_php 工作。

我在 php.ini 中设置了 PHP 限制,并且在 phpinfo() 中看到了此限制。我没有在 PHP 脚本中设置任何限制。

最佳答案

正如您所知,while($row = $db->query($sql)) 会导致无限循环;它只是一遍又一遍地运行查询,直到服务器死亡或终止进程。您需要执行 while($row = $result->fetch())while($row = $result->fetch_assoc(...))

另外,请don't use mysql_* ; mysql_* 函数已过时,deprecated ,而且缺乏安全感。使用MySQLiPDO相反。

编辑:我一开始不明白你的问题。问题是:mod_php 在 Apache 中运行,这意味着它通过 Apache 进程请求内存。因此,$db->query() 所需的内存由 Apache 使用,而不是单独的 mod_php 进程。 mysql_* 函数存在一些已知的内存问题。例如,如here所述, mysql_query() 缓冲查询中的所有数据。然而,mod_php 显然没有跟踪它,因为您从未真正将该数据分配给 PHP 变量。因此,Apache 的内存占用量不断增长,但 mod_php 没有意识到这一点,因此 php.ini 内存限制永远不会生效。

正如我上面所说,您应该避免 mysql_* 函数和 MySQL 类,并使用 MySQLi 或 PDO。这种错误行为就是一个很好的理由。祝你好运!

关于php - php中的mysql查询循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21518290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com