34

次のようなコードを少し使用すると、次のようになります。

$update_result = mysqli_query( $link , $sql_update_login ) or die ('Unable to execute query. '. mysqli_error($link));

それは死ぬ必要がありますか、それとも後で別のクエリを入れることができますか? エラーのログを別のテーブルに書き込む所定の関数のように? そのような:

$update_result = mysqli_query( $link , $sql_update_login ) or function('$query, $error);

「または」の後の他のオプションは何ですか? 私はドキュメントでそれを見つけていません。手がかりをいただければ幸いです。

4

4 に答える 4

79

死ななければならないのか

それどころか、決してすべきではありませんor die()
PHP は遺伝の悪い言語です。非常に悪い遺伝。そしてor die()、エラーメッセージは最悪の基本の1つです:

  • die はエラー メッセージを表示し、潜在的な攻撃者にシステム内部の一部を明らかにします。
  • 無実のユーザーを奇妙なメッセージで混乱させ、操作するインターフェイスを残さないため、ドロップアウトする可能性があります。
  • 途中でスクリプトを強制終了するため、破損したデザイン (またはデザインがまったく表示されない) が表示される可能性があります (つまり、ユーザーが要求したページの不完全なレンダリング)。
  • スクリプトを取り返しのつかないほど殺します。スローされた例外はキャッチして適切に処理できますが、
  • die()エラーが発生した場所のヒントはありません。また、比較的大きなアプリケーションでは、見つけるのが非常に面倒です。

そのため、一時的なデバッグであっても、die() MySQL エラーには使用しないでください。もっと良い方法があります。

エラーを手動でチェックする代わりに、次の行を接続コードに追加して、エラー時に例外をスローするように mysqli を構成するだけです。

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

その後、すべての mysqli コマンドを、or die他に何もせずにそのまま記述します。

$result = mysqli_query($link, $sql);

このコードは、エラーが発生した場合に例外をスローするため、余分なコードを 1 行も書かなくても、すべての問題が常に通知されます。

コードをよりクリーンにしながら、エラー レポートを本番環境に対応させ、統一し、全体的に適切にする方法についての詳細な説明は、PHP エラー レポートに関する私の記事を参照してください。

于 2013-03-10T08:33:48.887 に答える
6

orは単なる演算子です ( と非常によく似てい||ます)。

or die()構文が機能するのは、最初のステートメントが true の場合、常にortrue になることを意味する short-circuits であるため、は評価されず、スクリプトは評価されません。True or XXdie

于 2013-03-10T02:56:33.740 に答える
3

はい、(or) の後に別の関数を指定できます。私は以下をテストしました:

mysqli_query($sel_db,'what!') or some_func(mysqli_error($sel_db));

function some_func($str) {
    die("ERROR: ".$str);
}
于 2013-03-10T03:01:37.740 に答える
0

具体的である必要はありませんが、 ordie()を呼び出してスクリプトを停止させるもの、または例外をスローするものである必要があります。そうしないと、スクリプトはその関数の戻り値 (おそらく null またはある種のがらくた) を使用して続行し、ほぼ確実に問題が発生します。exit()die()$update_result

于 2013-03-10T03:02:40.607 に答える