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判断连接是否可用的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。