プロシージャル MySQL の後に OO-MySQLi を使い始めましたが、問題があります。
本番環境では、私のシステムはすべてのエラーをカスタム ページとして表示します。MySQLi エラーも「エラー」であり、キャッチしたいのですが、ドキュメントにはこれを行う方法が 1 つしか記載されていません。
if (!$mysqli->query("SET a=1")) {
exit('An error occurred: ' . $mysqli->error);
}
(ほんの一例です)。私のシステムでは、ログの記録、イベントの呼び出しなど、エラーが発生したときに多くのことを行っているため、これは非常に悪い方法です。
もちろん、次のように mysqli クラスを拡張できます。
class myMysqli {
public function __construct(/* ... */)
{
parent::__construct(/* ... */);
}
public function query(/* .. */)
{
parent::query(/* ... */);
if($this->errno !== 0)
{
// An error occurred
}
}
}
$mysqli = new myMysqli(/* ... */);
$mysqli->query(/* ... */);
しかし、この方法では、エラーが発生する可能性のあるほぼすべてのメソッドを拡張する必要があります。さらに、MySQLi は、独自のエラーを持つ準備済みステートメント (mysqli_stmt クラス) を提供します!
MySQLi エラーを処理するためのより良い方法を知っていますか? 前もって感謝します。
追加した
例外について: 例外がある場合、次のようなことを行う必要があることを正しく理解していますか?
try {
$mysqli->query(/* ... */);
} catch (Exception $e) {
// An error occurred
}
しかし、これは似ています
if(!$mysqli->query(/* ... */))
{
// An error occured
}
違いは何ですか?