mysql_ping() サーバーへの接続が正常かどうかを確認します。サーバーへの接続が利用可能な場合は true を返し、そうでない場合は false を返します。
ただし、PDO は mysql_ping() メソッドをサポートしていないため、mysql_ping() メソッドをシミュレートして接続が利用可能かどうかを確認する独自のコードを作成する必要があります。
コードは次のとおりです:
1 2 3 4 5 6 7 8 9 10 | <?php
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. テスト データ テーブルを作成します。
1 2 | 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.
1 2 3 4 5 | insert into user(name) values('fdipzone'),('xfdipzone'),('terry');mysql> select * from user;
+----+-----------+| id | name |
+----+-----------+| 1 | fdipzone |
| 2 | xfdipzone || 3 | terry |
+----+-----------+
|
ログイン後にコピー
3.デモ ファイル
db.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?phprequire 'db.php';
$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 );
echo 'sleep 10'.PHP_EOL.PHP_EOL;
sleep(10);
}
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.
test.php を php cli モードで実行し、すぐに mysql.server stop と mysql.server start を実行してシミュレートします。中断
1 2 3 4 5 | mysql.server stopShutting down MySQL
.... SUCCESS!
mysql.server start
Starting MySQL
SUCCESS!
|
ログイン後にコピー
実行出力:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | connect okArray(
[0] => Array
(
[id] => 2
[name] => xfdipzone
)
)
sleep 10connect failureArray(
[0] => Array
(
[id] => 3
[name] => terry
)
)
sleep 10connect okArray(
[0] => Array
(
[id] => 3
[name] => terry
)
)
sleep 10
|
ログイン後にコピー
中断後、pdo_ping() が false を返し、接続が失敗し、後続のクエリが継続できるようにするために自動再接続を呼び出していることがわかります。処刑される。
この記事では、php で PDO を介して接続が利用可能かどうかを確認する方法について説明します。関連コンテンツの詳細については、php 中国語 Web サイトに注目してください。
関連する推奨事項:
php を使用して、ページまたは画像が gzip 圧縮されているかどうかを確認します
HTML5 は最新のファイルを取得します。地理的位置と Baidu Map に示されている例
php
の自動インクリメント ID を通じて一意の数値クラスを作成します。
以上がPDOで接続が利用可能かどうかをphpで確認する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。