私はこれをやっています(はい、間違った接続データを使用しています、それは接続エラーを強制することです)
try {
$connection = new mysqli('localhost', 'my_user', 'my_password', 'my_db') ;
} catch (Exception $e ) {
echo "Service unavailable";
exit (3);
}
しかしPHPはこのphp_warningを実行しています:
mysqli :: mysqli():(28000/1045):ユーザー 'my_user' @ 'localhost'のアクセスが拒否されました(パスワードを使用:YES)
この例では、接続エラーを強制するために間違った接続データを使用していますが、現実の世界ではデータベースがダウンしているか、ネットワークがダウンしている可能性があります。
質問:警告を抑制せずにデータベース接続の問題をインターセプトする方法はありますか?
Mysqliに例外をスローするように指示する必要があります。
mysqli_report(MYSQLI_REPORT_STRICT);
try {
$connection = new mysqli('localhost', 'my_user', 'my_password', 'my_db') ;
} catch (Exception $e ) {
echo "Service unavailable";
echo "message: " . $e->message; // not in live code obviously...
exit;
}
これで例外をキャッチし、そこから取得できます。
PHP 5.2.9+
if ($mysqli->connect_error) {
die('Connect Error, '. $mysqli->connect_errno . ': ' . $mysqli->connect_error);
}
Jeroenが示唆するように、レポートモードも厳密なレベルに設定する必要がありますが、上記のコードは接続エラーを明確に検出するのに役立ちます。これら2つのアプローチの組み合わせは、 PHPマニュアル で推奨されています。
小切手 $connection->connect_error
値。
ここの例を参照してください: http://www.php.net/manual/en/mysqli.construct.php