gpt4 book ai didi

PHP PDO 超时

转载 作者:行者123 更新时间:2023-11-30 00:31:45 25 4
gpt4 key购买 nike

我在 PHP 页面中有一个特定的功能,可以通过 AJAX 从 MySQL 检索一些数据。它与通过给出所需的类别来获取按类别分组的项目列表有关。当使用 1 个类别调用该函数时,几乎需要一分钟才能返回结果,并且超过 1 个类别时,服务器会给出 500 Internal Server Error 并且在日志中有:

[warn] mod_fcgid: read data timeout in 60 seconds
[error] Premature end of script headers: search.php

很明显,查询执行时间太长(错误就发生在

$query->execute();

line - 在超过 1 个类别的情况下执行之前的所有行且之后不执行任何行,这会提供 500 ISE)。

问题是,当我手动通过 phpMyAdmin 运行查询时,它显示

Query took 0.8030 sec

是什么导致了执行时间的巨大差异(不到一秒到超过一分钟)?

注意:由于查询的类别数量是随机的,因此我使用构成类别的组合键的所有三列动态构建 WHERE 语句的类别部分:

$whereCategories = '(';
for($i=0;$i<count($categories);$i++)
{
$whereCategories.= ($i==0?'':' OR ').'(id1=:id1'.$i.
' AND id2=:id2'.$i.
' AND id3=:id3'.$i.')';
}
$whereCategories.= ')';

然后将其附加到查询中:

$query = $this->connection->prepare("SELECT ... WHERE ... ".
($whereCategories=="()"?"":" AND ".$whereCategories).
" ... ");

并绑定(bind)所有值:

for($i=0;$i<count($categories);$i++)
{
$query->bindValue(':id1'.$i, $categories[$i]['id1']);
$query->bindValue(':id2'.$i, $categories[$i]['id2']);
$query->bindValue(':id3'.$i, $categories[$i]['id3']);
}

//code runs up to here
$result = $query->execute();
//code here doesn't run

更新:我通过将所有类别值直接放入查询字符串中而不是使用 $query->bindValue(); 解决了性能问题。但是,如果有人可以解释为什么多个值绑定(bind)工作得如此缓慢,我仍然会很感激? (即使对于 2 个类别 - 也只有 6 个绑定(bind)。)

最佳答案

如果使用“localhost”连接 PDO,请将其更改为 127.0.0.1当我第一次学习 PDO 时,这导致了我巨大的执行时间。

关于PHP PDO 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22456845/

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