Hyd*_*erA 6 php mysql error-handling pdo
如何修改此类以捕获MySQL服务器离开的异常并重新连接?
<?php
class DBConn
{
private $conn;
public function __construct( $persistent = false )
{
try
{
$this->conn = new PDO( "mysql:host=localhost;dbname=test", 'test', "hoollaahaoo" );
$this->conn->exec( "SET CHARACTER SET utf8" );
$this->conn->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC );
if ( $persistent )
$this->conn->setAttribute( PDO::ATTR_PERSISTENT, true );
}
catch( PDOException $e )
{
return $e->getMessage();
}
}
public function getConn()
{
return $this->conn;
}
}
Run Code Online (Sandbox Code Playgroud)
你可能需要像这样创建自己的课程
try/except从......中去除__construct$conn = null;
$限制= 10;
$计数器= 0;
而(真){
尝试 {
$conn = DBConn();
休息;
}
捕获(异常$e){
$conn = null;
$计数器++;
if ($counter == $limit)
抛出$e;
}
}
编辑1:
但如果你说你的服务器消失了......那么可能是这样的
protected function _connect( $persistent = false ) {
$conn = null;
$limit = 10;
$counter = 0;
while (true) {
try {
$this->conn = new PDO( "mysql:host=localhost;dbname=test", 'test', "hoollaahaoo" );
$this->conn->exec( "SET CHARACTER SET utf8" );
$this->conn->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC );
if ( $persistent )
$this->conn->setAttribute( PDO::ATTR_PERSISTENT, true );
}
catch (Exception $e) {
$conn = null;
$counter++;
if ($counter == $limit)
throw $e;
}
}
public function __construct( $persistent = false )
{
$this->_connect($persistent);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5704 次 |
| 最近记录: |