Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当MySQL查询耗时超过X秒时,PHP PDO执行中止?_Php_Mysql_Pdo - Fatal编程技术网

当MySQL查询耗时超过X秒时,PHP PDO执行中止?

当MySQL查询耗时超过X秒时,PHP PDO执行中止?,php,mysql,pdo,Php,Mysql,Pdo,PHP PDO或MySQL中是否有一个功能,当执行时间超过(比如)2秒时,会自动中止并返回一个空结果集 做了一些搜索,没有找到任何有用的东西。我认为这对于用户体验来说可能是非常好的,尤其是对于那些无关紧要的统计数据 试图在PHP中找到一种方法来实现这一点,但不确定如何在未返回时监视PDO:execute()的执行时间 有什么想法吗?您可以通过我的设置PDO::ATTR\U TIMEOUT来完成此操作,如下所示: $db = new PDO( "mysql:host=$host;dbnam

PHP PDO或MySQL中是否有一个功能,当执行时间超过(比如)2秒时,会自动中止并返回一个空结果集

做了一些搜索,没有找到任何有用的东西。我认为这对于用户体验来说可能是非常好的,尤其是对于那些无关紧要的统计数据

试图在PHP中找到一种方法来实现这一点,但不确定如何在未返回时监视
PDO:execute()
的执行时间


有什么想法吗?

您可以通过我的设置PDO::ATTR\U TIMEOUT来完成此操作,如下所示:

$db = new PDO(
    "mysql:host=$host;dbname=$dbname", 
    $username, 
    $password,
    array(
      PDO::ATTR_TIMEOUT => 10
    )
  );

这会导致10秒后超时。

MySQL中有一个名为
MAX\u EXECUTION\u TIME
的全局变量。您可以设置:

SET GLOBAL MAX_EXECUTION_TIME = 1200;
或者您可以使用PDO库的
ATTR_TIMEOUT
选项,单位为秒(手动)

PDO::ATTR_TIMEOUT:以秒为单位指定超时持续时间。并非所有驱动程序都支持此选项,其含义可能因驱动程序而异。例如,sqlite将在放弃获取可写锁之前等待此时间值,但其他驱动程序可能会将其解释为连接或读取超时间隔。需要整数


你试过了吗?手册没有说明这是否适用于查询,但您可以尝试一下。您也可以尝试一下~但这也会影响到必须花费时间才能完成的重要查询?如何将其还原为原始值?是的。或者您可以使用
设置会话最大执行时间=1200
指定要使用此类超时的会话您是否测试过此功能?手册(或答案完全相同的链接问题)不清楚这是否适用于查询或仅适用于connection@Phil为此,我在自己的代码中使用了它。所以,是的,它已经过“测试”。我没有访问发问者的数据库,我是否没有办法根据他的具体实现来测试它。我的意思是你测试过它以检查长时间运行的查询超时吗?@Phil,是的。在我自己的代码中,我使用它自动超时长查询。这确实会导致我在某些时候暂停。那么会发生什么呢?它会抛出异常还是什么?