php执行过长导致mysql连接超时

209 阅读1分钟

问题

  • php执行时间超过了数据库设置的超时时间,报错:MySQL server has gone away
  • 使用的pdo连接

解决

  • 可以修改mysql超时时间,但目前无法确定多少时间合适,索性迂回一下
  • 每次执行mysql语句时要获取PDO实例,此时检查是否可用,不可用就new一个新的连接
    /**
     * 检查连接是否可用
     * @param PDO $conn 数据库连接
     * @return bool
     */
    protected function checkPdo(PDO $conn): bool
    {
        try {
            $conn->getAttribute(PDO::ATTR_SERVER_INFO);
        } catch (PDOException $e) {
            if ($e->getCode() == 'HY000') {
                return false;
            }
            throw $e;
        }
        return true;
    }
    

参考