0

エラーが発生した場合、彼に2つのことをしてもらいたい.

  1. echo nl2br($qVraagOp);
  2. mysql_error();

だから私は思った:

$rVraagOp = mysql_query( $qVraagOp ) or die( echo nl2br($qVraagOp); mysql_error(); );

これら 2 つのことを実行する関数を作成し、それを呼び出すことができますが、それは少し冗長です。他の方法はありますか?

マティ

4

5 に答える 5

5

技術的なエラー メッセージが表示されるだけでは、少なくともエンド ユーザーにとっては役に立ちません。それらを念頭に置いてサイトを設計する必要があります。

おそらく誰にとってもより便利な解決策は次のとおりです。

  • 技術的なエラー メッセージをファイルに記録し、時々確認します
  • 適切な「おっと、エラーが発生しました」ページをエンドユーザーに表示します。


それでも、これが本当に必要な場合は、次のことができます。

  • 両方の情報を連結して、文字列を 1 つだけにします
  • if/else ブロックを使用します。これにより、コードが読みやすくなります。


良い解決策は、例外(半疑似コード)を使用することです。
もちろん、これはMySQLExceptionどこかに定義したことを考慮したものです。

try {
    // Do some stuff

    if (!mysql_query(...)) {
        throw new MySQLException(mysql_error());
    }

    // Some other stuff
} catch (MySQLException $e) {
    // Deal with the MySQLException kind of Exception
    // i.e. deal my SQL errors
    // => Log to file
    //    + display a nice error page
} catch (Exception $e) {
    // At least, if something in the try block
    // might raise an Exception that's not a MySQLException
}

Exception の良い点の 1 つは、エラーを処理するすべてのコードが 1 か所にあることですdie。コードの途中にどこにもありません。

于 2010-02-22T20:22:25.697 に答える
1

私は次のような関数を書きます:

function PrintDebug($DebugData)
{ 
  if($DebugMode == 1)
  { 
      return nl2br($DebugData) . "<br />" . mysql_error();
  }
  else
  {
      return "Ops stuff got messed up!!!";
  }
} 

そして、私はそれを次のように使用します

$rVraagOp = mysql_query( $qVraagOp ) or die(PrintDebug($qVraagOp));

デバッグステータスをDBに保存するのはあなたの仕事です(メンテナンスモードがアクティブかどうかを考えてください)。ファイルへのログも役立ちます。また、私はそれをテストしなかったことを指摘したいと思います。

于 2010-02-22T20:26:49.510 に答える
0

だからあなたは両方nl2br($qVraagOp)とを表示したいmysql_error()ですか?それは

or die(nl2br($qVraagop) . PHP_EOL . mysql_error())

(定数を使用してとのPHP_EOL間に改行を配置します)nl2br($qVraagOp)mysql_error()

于 2010-02-22T20:19:54.470 に答える
0

PHPでこれを試すべきではありませんが、機能するはずです。申し訳ありませんが、そうでない場合:)

$rVraagOp = mysql_query( $qVraagOp ) or echo(nl2br($qVraagOp)) and die(mysql_error());
于 2010-02-22T20:21:18.863 に答える
0

あなたは書ける

$rVraagOp = mysql_query( $qVraagOp ) 
          or die( sprintf("%s%s%s", nl2br($qVraagop), PHP_EOL, mysql_error()) );

die() は、文字列 (または int) を引数として受け取ります。

瀕死のメッセージはログにのみ保存され、最終ユーザーには出力されないことを確認してください。これは、通常は役に立たず、危険でさえあるためです (設定に関する情報が潜在的な攻撃者に明らかになります)。

于 2010-02-22T20:22:28.527 に答える