设置MySQLi查询执行超时[重复]

b5lpy0ml  于 5个月前  发布在  Mysql
关注(0)|答案(2)|浏览(67)

此问题在此处已有答案

How to set a maximum execution time for a mysql query?(5个答案)
18天前关闭
我正在探索在PHP和MySQLi中设置超时/停止特定查询的可能性。
php.net 稍微修改的例子:

if ($stmt = $mysqli->prepare("INSERT NESTED MYSQL QUERY HERE.")) {
    $stmt->bind_param("s", $city);
    $stmt->execute();
    $stmt->set_timeout("50000"); //hypothetical, will not work
    $stmt->bind_result($district);
    while($stmt->fetch()){ 
        //to do
    }
}
$mysqli->close();

字符串
这可能吗?
理想的实施:
1.在PHP代码内部,而不是通过配置MySQL服务器
1.只能对选定的查询而不是对所有查询实现
1.工作(至少)在MySQL 5.6及以上
1.可以通知最终用户,例如
此过程所用时间比预期的长。请尝试将数据集拆分为多个段。

au9on6nz

au9on6nz1#

请参阅此
http://mysqlserverteam.com/server-side-select-statement-timeouts/
对于只读SELECT语句

SELECT 
MAX_STATEMENT_TIME = 2000 --in milliseconds
* 
FROM table;

字符串

1hdlvixo

1hdlvixo2#

function querylimit($Link,$Query,$Limit){
    $Link->query($Query,MYSQLI_ASYNC);
    $retries = 0;
    do{
        $changed[] = $errored[] = $empty[] =$Link;
        $poll_result = mysqli_poll($changed,$errored,$empty,1);
        if($poll_result === false){
            return true;
        }
        if($poll_result > 0 && !empty($changed)){
            return true;
        }
        if($retries++ >= $Limit){
            $Link->kill($Link->thread_id);
            return false;
        }
    }while(true);
}

querylimit($mysqli,"select sleep(30)",5);

字符串

相关问题