php PDO判断连接是否可用的实现方法
mysql_ping()检查到服务器的连接是否正常。如果到服务器的连接可用,则返回true,否则返回false。
但PDO不支持mysql_ping()方法,因此需要自己编写代码模拟mysql_ping()方法,检查连接是否可用。
代码如下:
getAttribute(PDO::ATTR_SERVER_INFO);
}catch(PDOException$e){
if(strpos($e->getMessage(),'MySQLserverhasgoneaway')!==false){
returnfalse;
}
}
returntrue;
}
?>
代码演示:
1、创建测试数据表
CREATETABLE`user`( `id`int(11)unsignedNOTNULLAUTO_INCREMENT, `name`varchar(20)NOTNULL, PRIMARYKEY(`id`) )ENGINE=InnoDBDEFAULTCHARSET=utf8;
2、插入测试数据
insertintouser(name)values('fdipzone'),('xfdipzone'),('terry');
mysql>select*fromuser;
+----+-----------+
|id|name|
+----+-----------+
|1|fdipzone|
|2|xfdipzone|
|3|terry|
+----+-----------+
3、演示文件
db.php
PDO::ERRMODE_EXCEPTION,
);
if($charset!=''){
$h_param[PDO::MYSQL_ATTR_INIT_COMMAND]='SETNAMES'.$charset;//設置默認編碼
}
if($pconnect){
$h_param[PDO::ATTR_PERSISTENT]=true;
}
$conn=newPDO($dsn,$dbuser,$dbpasswd,$h_param);
}catch(PDOException$e){
thrownewErrorException('Unabletoconnecttodbserver.Error:'.$e->getMessage(),31);
}
self::$_instance=$conn;
return$conn;
}
//执行查询
publicstaticfunctionquery($dbconn,$sqlstr,$condparam){
$sth=$dbconn->prepare($sqlstr);
try{
$sth->execute($condparam);
}catch(PDOException$e){
echo$e->getMessage().PHP_EOL;
}
$result=$sth->fetchAll(PDO::FETCH_ASSOC);
return$result;
}
//重置连接
publicstaticfunctionreset_connect(){
self::$_instance=null;
}
}
?>
test.php
'localhost',
'dbname'=>'user',
'user'=>'root',
'password'=>'',
'pconnect'=>0,
'charset'=>''
);
//循环执行
while(true){
//创建数据连接
$dbconn=DB::get_conn($config);
//判断连接是否有效
$status=pdo_ping($dbconn);
if($status){
echo'connectok'.PHP_EOL;
}else{
echo'connectfailure'.PHP_EOL;
//重置连接
DB::reset_connect();
$dbconn=DB::get_conn($config);
}
//执行查询
$sqlstr='select*fromuserwhereid=?';
$condparam=array(mt_rand(1,3));
$data=DB::query($dbconn,$sqlstr,$condparam);
print_r($data);
//延时10秒
echo'sleep10'.PHP_EOL.PHP_EOL;
sleep(10);
}
/**
*检查连接是否可用
*@paramLink$dbconn数据库连接
*@returnBoolean
*/
functionpdo_ping($dbconn){
try{
$dbconn->getAttribute(PDO::ATTR_SERVER_INFO);
}catch(PDOException$e){
if(strpos($e->getMessage(),'MySQLserverhasgoneaway')!==false){
returnfalse;
}
}
returntrue;
}
?>
4、执行
在phpcli模式下执行test.php,然后马上执行mysql.serverstop与mysql.serverstart模拟闪断
mysql.serverstop ShuttingdownMySQL ....SUCCESS! mysql.serverstart StartingMySQL SUCCESS!
执行输出:
connectok Array ( [0]=>Array ( [id]=>2 [name]=>xfdipzone ) ) sleep10 connectfailure Array ( [0]=>Array ( [id]=>3 [name]=>terry ) ) sleep10 connectok Array ( [0]=>Array ( [id]=>3 [name]=>terry ) ) sleep10
可以看到闪断后,pdo_ping()返回false,连接失败,然后调用自动重连,保证后面的查询能继续执行。
以上这篇phpPDO判断连接是否可用的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
