我正在探索在 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();
这可能吗?
理想的实现:
这个过程比预期的要长。尝试将您的数据集拆分为 片段。
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);
参考这个
http://mysqlserverteam.com/server-side-select-statement-timeouts/
对于只读 SELECT 语句
SELECT
MAX_STATEMENT_TIME = 2000 --in milliseconds
*
FROM table;