Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.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 mysql服务器在PDO中消失了_Php_Mysql_Pdo_Ping_Reconnect - Fatal编程技术网

Php mysql服务器在PDO中消失了

Php mysql服务器在PDO中消失了,php,mysql,pdo,ping,reconnect,Php,Mysql,Pdo,Ping,Reconnect,我正在运行我的php脚本,遇到了一个间歇性问题: PHP致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[HY000]:一般错误:2013年查询期间与MySQL服务器失去连接” 如果发生这种错误,是否可以在PDO中ping mysql 我只是想提醒你,我的PDO连接不是持久的。我正在连接循环中的PDO。我想每次新的连接都会在循环中打开。如果是这样,那么为什么mysql会失去连接?或者,如果PDO连接已经存在,那么它可能会给出现有的PDO对象。但是,如果发生这种错误,它应

我正在运行我的php脚本,遇到了一个间歇性问题:

PHP致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[HY000]:一般错误:2013年查询期间与MySQL服务器失去连接”

如果发生这种错误,是否可以在PDO中ping mysql

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


是否有任何可能的解决方案来避免此错误?

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

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

在我的例子中,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();
}

问题现在已经解决。

TRY-and-catch似乎是合法的。在连接数据库时,我已经在处理异常。函数connect(){try{$this->connection=new PDO($this->dsn,$this->username,$this->password);}catch(PDO异常$e){throw new jsDatabaseException($e->getMessage()。[dsn:'.$this->dsn.]');}$this->connection->setAttribute(PDO_ATTR_ERRMODE,PDO_ERRMODE_EXCEPTION);}您需要对所有数据库查询使用try-catch,而不仅仅是连接。这样,如果您执行选择或更新,并且数据库连接已消失,则会抛出异常,您可以捕获异常,并可能重新连接或其他操作。这里有类似的问题。在我的脚本中,我先调用SP,然后再调用select。在短时间内,调用正在运行时间过去工作正常。现在SP大约需要60秒。SP完成时没有错误(处理约800K行),但PHP似乎需要太多时间。将SP限制为处理1000行在0.3秒内返回,脚本继续完美无缺。看起来,使用驱动程序(PDO)只是时间问题有人有什么线索吗?我们使用Boris作为CLI进行测试,并解决了这个问题。以上为我解决了这个问题-谢谢!