2

PDO ステートメントを取得して安全なエラー メッセージを生成するにはどうすればよいですか? ユーザーにエラー メッセージを表示したくありません。「おっと、予期しないことが起こった!」というわかりやすいメッセージが表示されたページに誘導してもらいたいのです。また、エラーをデータベースに記録して、他の人が生成しているエラーを確認してキャッチしたいと考えています。

PHPとMySQLを使用しています。

接続を確立すると、エラー処理を次のように設定できることがわかりました。

$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

誰かが前にこのようなことをしましたか?

4

3 に答える 3

2

私はこれを試したことがないので、これは単なる提案にすぎませんが、少し考えてみると、興味深い選択肢になると思います。私はPHPとPDOにかなり慣れていないので、他にもっと良い方法があると確信しています。

おそらくtry、PHP の関数を使用してみて、(失敗した場合) PDOException をエコーする代わりに、それをテキスト ファイルに出力する別の関数を実行することができます。何かのようなもの。

<?php
try {
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    foreach($dbh->query('SELECT * from FOO') as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    $strFileName = 'whatever.txt';

    if(!is_writable($strFileName))
        die('Change permisions to ' . $strFileName);

    $handle = fopen($strFileName, 'a+');

    fwrite($handle, "\r" . $e->getMessage() . "\r");
    fclose($handle);
}
?> 

このようにして、DB接続を回避しますが(これは私が推測する問題です)、それでもエラーを保存します。if ステートメント内の die の後にエコーされたテキストを省略したい場合があります。

于 2013-05-08T18:22:56.840 に答える
1

データベースではなく、ファイルにログを書き込む方がよいと思います。特に、データベース接続に何か問題があることを示す PDO エラーをログに記録したいので。

エラーをキャッチすることで、適切なエラー ページをユーザーに表示できます。何か問題が発生した場合に備えて、ユーザーをエラーページにリダイレクトできます。

于 2013-05-08T18:00:53.863 に答える