本篇文章主要介绍php PDO实现判断连接是否可用的方法,感兴趣的朋友参考下,希望对大家有所帮助。
mysql_ping() 检查到服务器的连接是否正常。如果到服务器的连接可用,则返回true,否则返回false。
但PDO不支持mysql_ping()方法,因此需要自己编写代码模拟mysql_ping()方法,检查连接是否可用。
代码如下:
<?php /** * 检查连接是否可用 * @param Link $dbconn 数据库连接 * @return Boolean */ function pdo_ping($dbconn){ try{ $dbconn->getAttribute(PDO::ATTR_SERVER_INFO); } catch (PDOException $e) { if(strpos($e->getMessage(), 'MySQL server has gone away')!==false){ return false; } } return true; } ?>
代码演示:
1、创建测试数据表
CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、插入测试数据
insert into user(name) values('fdipzone'),('xfdipzone'),('terry'); mysql> select * from user; +----+-----------+ | id | name | +----+-----------+ | 1 | fdipzone | | 2 | xfdipzone | | 3 | terry | +----+-----------+
3、演示文件
db.php
<?php // 数据库操作类 class DB{ // 保存数据库连接 private static $_instance = null; // 连接数据库 public static function get_conn($config){ if(isset(self::$_instance) && !empty(self::$_instance)){ return self::$_instance; } $dbhost = $config['host']; $dbname = $config['dbname']; $dbuser = $config['user']; $dbpasswd = $config['password']; $pconnect = $config['pconnect']; $charset = $config['charset']; $dsn = "mysql:host=$dbhost;dbname=$dbname;"; try { $h_param = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ); if ($charset != '') { $h_param[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES ' . $charset; //設置默認編碼 } if ($pconnect) { $h_param[PDO::ATTR_PERSISTENT] = true; } $conn = new PDO($dsn, $dbuser, $dbpasswd, $h_param); } catch (PDOException $e) { throw new ErrorException('Unable to connect to db server. Error:' . $e->getMessage(), 31); } self::$_instance = $conn; return $conn; } // 执行查询 public static function query($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; } // 重置连接 public static function reset_connect(){ self::$_instance = null; } } ?>
test.php
<?php require 'db.php'; // 数据库设定 $config = array( 'host' => 'localhost', 'dbname' => 'user', 'user' => 'root', 'password' => '', 'pconnect' => 0, 'charset' => '' ); // 循环执行 while(true){ // 创建数据连接 $dbconn = DB::get_conn($config); // 判断连接是否有效 $status = pdo_ping($dbconn); if($status){ echo 'connect ok'.PHP_EOL; }else{ echo 'connect failure'.PHP_EOL; // 重置连接 DB::reset_connect(); $dbconn = DB::get_conn($config); } // 执行查询 $sqlstr = 'select * from user where id=?'; $condparam = array(mt_rand(1,3)); $data = DB::query($dbconn, $sqlstr, $condparam); print_r($data); // 延时10秒 echo 'sleep 10'.PHP_EOL.PHP_EOL; sleep(10); } /** * 检查连接是否可用 * @param Link $dbconn 数据库连接 * @return Boolean */ function pdo_ping($dbconn){ try{ $dbconn->getAttribute(PDO::ATTR_SERVER_INFO); } catch (PDOException $e) { if(strpos($e->getMessage(), 'MySQL server has gone away')!==false){ return false; } } return true; } ?>
4、执行
在php cli模式下执行test.php,然后马上执行mysql.server stop 与 mysql.server start 模拟闪断
mysql.server stop Shutting down MySQL .... SUCCESS! mysql.server start Starting MySQL SUCCESS!
执行输出:
connect ok Array ( [0] => Array ( [id] => 2 [name] => xfdipzone ) ) sleep 10 connect failure Array ( [0] => Array ( [id] => 3 [name] => terry ) ) sleep 10 connect ok Array ( [0] => Array ( [id] => 3 [name] => terry ) ) sleep 10
可以看到闪断后,pdo_ping()返回false,连接失败,然后调用自动重连,保证后面的查询能继续执行。
以上就是本文的全部内容,希望对大家的学习有所帮助。
相关推荐:
Atas ialah kandungan terperinci php PDO实现判断连接是否可用的方法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel ini membincangkan PHP, memperincikan bentuk penuhnya, kegunaan utama dalam pembangunan web, perbandingan dengan Python dan Java, dan kemudahan pembelajarannya untuk pemula.

Kepekaan kes PHP berbeza -beza: Fungsi tidak sensitif, manakala pembolehubah dan kelas sensitif. Amalan terbaik termasuk penamaan yang konsisten dan menggunakan fungsi kes-insensitif untuk perbandingan.

Artikel ini membincangkan pelbagai kaedah untuk pengalihan halaman dalam PHP, yang memberi tumpuan kepada fungsi header () dan menangani isu -isu biasa seperti "tajuk telah menghantar" kesilapan.

Artikel ini membincangkan objek data PHP (PDO), lanjutan untuk akses pangkalan data dalam PHP. Ia menyoroti peranan PDO dalam meningkatkan keselamatan melalui kenyataan yang disediakan dan faedahnya terhadap MySQLI, termasuk abstraksi pangkalan data dan pengendalian ralat yang lebih baik.

Memcache dan Memcached adalah sistem caching PHP yang mempercepat aplikasi web dengan mengurangkan beban pangkalan data. Satu contoh boleh dikongsi di kalangan projek dengan pengurusan kunci yang teliti.

Artikel membincangkan langkah -langkah untuk membuat dan mengurus pangkalan data MySQL menggunakan PHP, memberi tumpuan kepada sambungan, penciptaan, kesilapan umum, dan langkah -langkah keselamatan.

Artikel ini membincangkan bagaimana JavaScript dan PHP berinteraksi secara tidak langsung melalui permintaan HTTP kerana persekitaran yang berbeza. Ia merangkumi kaedah untuk menghantar data dari JavaScript ke PHP dan menyoroti pertimbangan keselamatan seperti pengesahan data dan prot

Artikel ini membincangkan skrip PHP dari baris arahan, termasuk langkah -langkah, pilihan umum, kesilapan penyelesaian masalah, dan pertimbangan keselamatan.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular
