Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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
Php 10秒以上终止连接的MySQL存储过程_Php_Mysql_Stored Procedures - Fatal编程技术网

Php 10秒以上终止连接的MySQL存储过程

Php 10秒以上终止连接的MySQL存储过程,php,mysql,stored-procedures,Php,Mysql,Stored Procedures,如何使用MySQL和PHP关闭(杀死)执行时间过长的连接解决方案是编写一个存储过程,在一段时间内杀死所有连接: DELIMITER // DROP PROCEDURE IF EXISTS ClearDB// CREATE PROCEDURE ClearDB() BEGIN DECLARE nID, bCursor INT; DECLARE cursorQuery CURSOR FOR SELECT ID FROM information_sche

如何使用MySQL和PHP关闭(杀死)执行时间过长的连接解决方案是编写一个存储过程,在一段时间内杀死所有连接:

DELIMITER //
DROP PROCEDURE IF EXISTS ClearDB//
CREATE PROCEDURE ClearDB()
BEGIN
    DECLARE nID, bCursor INT;
    DECLARE cursorQuery CURSOR FOR 
        SELECT ID
        FROM information_schema.processlist
        WHERE `TIME` > 10;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET bCursor = 1;

    OPEN cursorQuery;
    SET bCursor = 0;

    WHILE bCursor = 0 DO
        FETCH cursorQuery INTO nID;
        KILL nID;
    END WHILE;

    CLOSE cursorQuery;
END //
DELIMITER ;
程序非常简单: 获取时间大于10的所有连接ID,遍历结果并杀死它们

您可以创建一个cron任务来调用ClearDB()过程,也可以在每次打开新连接时调用它,如下所示:

$pDB = new mysqli('localhost', 'user', 'pass', 'database');
if ($pDB->connect_error) 
{
    // Handle the error
}
$pDB->query('CALL ClearDB()');

希望它能帮助某人:)

解决方案是编写一个存储过程,在一段时间内终止所有连接:

DELIMITER //
DROP PROCEDURE IF EXISTS ClearDB//
CREATE PROCEDURE ClearDB()
BEGIN
    DECLARE nID, bCursor INT;
    DECLARE cursorQuery CURSOR FOR 
        SELECT ID
        FROM information_schema.processlist
        WHERE `TIME` > 10;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET bCursor = 1;

    OPEN cursorQuery;
    SET bCursor = 0;

    WHILE bCursor = 0 DO
        FETCH cursorQuery INTO nID;
        KILL nID;
    END WHILE;

    CLOSE cursorQuery;
END //
DELIMITER ;
程序非常简单: 获取时间大于10的所有连接ID,遍历结果并杀死它们

您可以创建一个cron任务来调用ClearDB()过程,也可以在每次打开新连接时调用它,如下所示:

$pDB = new mysqli('localhost', 'user', 'pass', 'database');
if ($pDB->connect_error) 
{
    // Handle the error
}
$pDB->query('CALL ClearDB()');
希望它能帮助某人:)