php PDO判断连接是否可用的实现方法_php技巧_脚本之家

作者:编程    发布时间:2019-12-21 21:01     浏览次数 :

[返回]

代码演示:

insert into user values,,;mysql> select * from user;+----+-----------+| id | name |+----+-----------+| 1 | fdipzone || 2 | xfdipzone || 3 | terry |+----+-----------+
CREATE TABLE `user`  unsigned NOT NULL AUTO_INCREMENT, `name` varchar NOT NULL, PRIMARY KEY  ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.后台运维的php文件

 PDO::ERRMODE_EXCEPTION, ); if  { $h_param[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES ' . $charset; //设置默认编码 } if  { $h_param[PDO::ATTR_PERSISTENT] = true; } $conn = new PDO($dsn, $dbuser, $dbpasswd, $h_param); } catch  { throw new ErrorException('Unable to connect to db server. Error:' . $e->getMessage; } self::$_instance = $conn; return $conn; } // 执行查询 public static function query($dbconn, $sqlstr, $condparam){ $sth = $dbconn->prepare; try{ $sth->execute; } catch  { echo $e->getMessage().PHP_EOL; } $result = $sth->fetchAll; return $result; } // 重置连接 public static function reset_connect(){ self::$_instance = null; }}?>
 PDO::ERRMODE_EXCEPTION,);if  {$h_param[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES ' . $charset; //设置默认编码}if  {$h_param[PDO::ATTR_PERSISTENT] = true;}$conn = new PDO($dsn, $dbuser, $dbpasswd, $h_param);} catch  {throw new ErrorException('Unable to connect to db server. Error:' . $e->getMessage;}self::$_instance = $conn;return $conn;}// 执行查询public static function query($dbconn, $sqlstr, $condparam){$sth = $dbconn->prepare;try{$sth->execute;} catch  {echo $e->getMessage().PHP_EOL;}$result = $sth->fetchAll;return $result;}}?>

2、插入测试数据

Array([0] => Array([id] => 2[name] => xfdipzone))sleep 10SQLSTATE[HY000]: General error: 2006 MySQL server has gone awayArray()sleep 10Array([0] => Array([id] => 1[name] => fdipzone))sleep 10...

4、执行

4.施行步骤

但PDO不支持mysql_ping()方法,由此需求团结编写代码模拟mysql_ping(卡塔尔(قطر‎方法,检查三番五次是不是可用。

能够看来,闪断后不可能重新连接数据库,后边的程序不可能奉行下去。

db.php

改革后的php文件如下:

代码如下:

故而必要在闪断后,清空self::$_instance的值,使下一次再度得到连接,而不利用已经创办但失效的数据库连接。

getAttribute(PDO::ATTR_SERVER_INFO); } catch  { if(strpos, 'MySQL server has gone away')!==false){ return false; } } return true;}?>

5.日增重连机制

1、创造测验数据表

if(isset && !empty{return self::$_instance;}

test.php

mysql.server stopShutting down MySQL.. SUCCESS! mysql.server startStarting MySQLSUCCESS!

在php cli方式下进行test.php,然后立时试行mysql.server stop 与 mysql.server start 模拟闪断

增加reset_connect方法,当现身错误时调用。若是判别错误是MySQL server has gone away则清空已经存在的数据库连接,清空后下一次则会再也连接mysql。

上述那篇php PDO推断连接是不是可用的兑现方式便是作者分享给我们的全体内容了,希望能给大家叁个参谋,也意在大家多多照看脚本之家。

闪断后,因为 self::$_instance 的值存在,由此调用get_conn并不会另行连接,而是采取保留的连天实行拍卖。

mysql_ping(卡塔尔(قطر‎检查到服务器的接连是不是健康。假使到服务器的连接可用,则赶回true,不然重临false。

如上所述是作者给大家介绍的PHP连接MySql闪断自动重连的主意,希望对我们全部助于,假若大家有其余疑问请给自家留言,小编会及时过来大家的。在那也非常感激大家对剧本之家网址的帮衬!

 'localhost', 'dbname' => 'user', 'user' => 'root', 'password' => '', 'pconnect' => 0, 'charset' => '');// 循环执行while{ // 创建数据连接 $dbconn = DB::get_conn; // 判断连接是否有效 $status = pdo_ping{ echo 'connect ok'.PHP_EOL; }else{ echo 'connect failure'.PHP_EOL; // 重置连接 DB::reset_connect(); $dbconn = DB::get_conn; } // 执行查询 $sqlstr = 'select * from user where id=?'; $condparam = array; $data = DB::query($dbconn, $sqlstr, $condparam); print_r; // 延时10秒 echo 'sleep 10'.PHP_EOL.PHP_EOL; sleep;}/** * 检查连接是否可用 * @param Link $dbconn 数据库连接 * @return Boolean */function pdo_ping{ try{ $dbconn->getAttribute(PDO::ATTR_SERVER_INFO); } catch  { if(strpos, 'MySQL server has gone away')!==false){ return false; } } return true;}?>

6.再度举行闪断实践

下一篇:没有了