namespace util;
use think\Db;
/**
* 数据库主动重连
* @package util;
* @date 2019-9-16
* @author andy3513
*/
class ReloadDb {
private static $time = null;
/**
* 检测或执行主动重连
* @author andy3513
* @param int $timeout 超时时间
* @param array $config 连接参数
*/
public static function init($timeout = 7200,$config = []){
$time = time();
if(null === self::$time){
self::$time = $time;
}
$exprie = $time - self::$time;
if($exprie >= $timeout){
Db::connect($config, true);
self::$time = $time;
}
}
}
使用例子:可以在循环体或者递归内先进行检测重连即可解决问题
例如:
while(true){
\util\ReloadDb::init();//执行重连检测
Db::name("table")->limit(100)->select();//数据库操作
}
如有问题,欢迎拍砖注意使用的时候要在循环体内
参数超时时间可根据实际情况进行传入
最佳答案
