2

我正在运行我的 php 脚本并遇到间歇性问题:

PHP 致命错误:未捕获的异常 'PDOException' 带有消息'SQLSTATE [HY000]:一般错误:2013 查询期间丢失与 MySQL 服务器的连接'

如果出现此类错误,是否可以在 PDO 中 ping mysql?

我只是想在您的通知中提到这一点,即我的 PDO 连接不是持久的。我正在循环连接 PDO。我想每次新连接都会循环打开。如果是这样,那么为什么 mysql 会失去连接?或者,如果 PDO 连接已经存在,那么它可能会提供现有的 pdo 对象。但是如果发生这样的错误,它应该尝试重新连接并给出新的连接而不是错误。

任何可能的解决方案来避免错误?

4

2 回答 2

3

就我而言,PDO 采用单个连接,如果循环大小很大,则连接超时。所以,我增加了所有cli的PDO连接超时。

$this->connection = new PDO($this->dsn, $this->username, $this->password);
//Increase the session time out for all cli's
if(php_sapi_name() == 'cli'){
      $query = $this->connection->prepare("set session wait_timeout=10000,interactive_timeout=10000,net_read_timeout=10000");
      $query->execute();
}

问题现已解决。

于 2013-05-16T11:17:55.450 回答
0

我建议在 try..catch 块中运行数据库查询,如下所示:

try {
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    // Do something here
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage();
    die();
} 
于 2012-08-17T10:39:15.467 回答