0

これが別の質問と重複しているかどうかはわかりませんが、PHPいくつかを呼び出す小さなファイルとSQL INSERTDELETE画像タグ付けシステム用のファイルがあります。ほとんどの場合、挿入と削除の両方が機能しますが、場合によっては挿入が機能しません。

またはで関数SQLを使用する場合と同様に、ステートメントの実行に失敗した理由を表示する方法はありますか?失敗した場合は、その理由が表示されます (例: 重複キーの挿入、終了していない引用符など...)?SQLPythonJava

4

3 に答える 3

3

頭のてっぺんから思いつくことが2つあり、amitchhajerから盗んだことが1つあります。

  • pg_last_errorは、セッションの最後のエラーを教えてくれます。これは明らかな理由ですばらしいことです。問題が DB のダウンのようなものである場合に備えて、エラーをディスク上のテキスト ファイルに記録する必要があります。エラーを DB に保存しようとすると、理由を突き止める過程で、いくつかの HILARIOUS* hi-jinks が発生する可能性があります。

  • 成功したものも含め、すべてのクエリをこのテキスト ファイルに記録します。問題が同じ操作に影響するか (DB または接続の問題)、または毎回特定のクエリに影響するか (アプリの問題) を調べます。

  • サーバーの内部にアクセスできる場合 (または共有ホスティングが適切な場合) は、データベースのクエリ ログを有効にして調べます。ただし、アプリとサーバーの間にネットワークの問題がある場合、これは役に立ちません。

しかし、推測する必要がある場合、アプリが失敗すると、奇妙な入力が得られると想像できます。10 分の 9 の確率で、入力が適切にエスケープされていないか、型変換中にルーチンの問題として変数を削除する PHP を使用しているため、FALSE や NULL などに設定されており、システムが壊れたエラーを生成しています。のようなクエリINSERT INTO wizards (hats, cloaks, spell_count) VALUES ('Wizard Hat', 'Robes', );

*実際には陽気ではありません

于 2012-08-21T06:12:26.570 に答える
2

ログを開始して、SQL クエリの監視を開始します。そこでは、すべてのクエリが起動されたものと、エラーがある場合はエラーを確認できます。

ロガーを開始するためのこのチュートリアルが役に立ちます。

于 2012-08-21T06:14:01.097 に答える
0

PHP ファイルが使用する API に応じて (PDO であることを願いましょう ;)、s.th を使用して現在のトランザクションのエラーをチェックできます。お気に入り

$naughtyPdoStatement->execute();
if ($naughtyPdoStatement->errorCode() != '00000')
    DebuggerOfChoice::log( implode (' ', $naughtyPdoStatement->errorInfo() );

レガシー API を使用する場合mysql_errnomysql_errorpg_last_error、 などの同等物があり、同じことができるはずです。DebuggerOfChoice::Logもちろん、利用したい任意のログ機能にすることができます

于 2012-08-21T06:24:42.577 に答える