在 Gateway 里面,獲取 SQL 連接的代碼:
$ident = md5($dsn);
try {
if(!empty(self::$instances)){
$message = self::$instances->getAttribute(PDO::ATTR_SERVER_INFO);
if(strpos($message, 'Lost connection to MySQL server during query') !== FALSE || strpos($message, 'MySQL server has gone away') !== FALSE){
throw new \PDOException("MySQL server has gone away!");
}
}else{
self::$instances = new PDO($dsn, Config::DB_USERNAME, Config::DB_PASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET CHARACTER SET utf8;', PDO::ATTR_PERSISTENT => Config::DB_ATTR_PERSISTENT));
self::$instances->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if (Config::DB_SET_TIMEZONE == TRUE) {
static::setDbTimezone(Config::DB_TIMEZONE, self::$instances);
}
}
} catch (\Exception $e) {
Log::getLogger()->error($e->getMessage());
self::$instances = NULL;
self::$instances = new PDO($dsn, Config::DB_USERNAME, Config::DB_PASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET CHARACTER SET utf8;', PDO::ATTR_PERSISTENT => Config::DB_ATTR_PERSISTENT));
self::$instances->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if (Config::DB_SET_TIMEZONE == TRUE) {
static::setDbTimezone(Config::DB_TIMEZONE, self::$instances);
}
}
return self::$instances;
把 Mysql 的 wait_timeout 設(shè)置 6 秒,執(zhí)行跑腳本,sleep(7) 之后,在獲取pdo ,會直接拋出異常;
但是, 把這個代碼放在 Gateway 環(huán)境里面,設(shè)置估計7秒之后,才去獲取 pdo,沒有拋出異常,而是?PDO::getAttribute 直接返回了 “Lost connection to MySQL server during query”, 這是什么梗?