2011-05-10 27 views
4

の継続的な実行。エラーメッセージを出して残りのスクリプトを実行し続けるにはどうすればいいですか?接続に失敗しても、残りのスクリプトは影響を受けないためです。エラー処理とPHPスクリプト

+4

質問のタイトルは、ほぼ私に動脈瘤を与えました。 – Charles

+0

これは、ビュー/レスポンスを取得するタイトルです。通常、致命的なエラー(構文エラーなど)は、スクリプトを強制終了するだけです。あなたが持っている特定のエラーメッセージは何ですか? – Wige

+0

実際には面白いですが、尋ねられた質問のリストを見てから私のタイトルには気をつけませんでした。私はmysqlエラーのためにスクリプトを終了させたくありませんでした。 dbからデータを取得できない場合でも、残りのスクリプトを実行したかったのです。 – netrox

答えて

5
$result = mysql_query($sql); 
if(mysql_error()) { 
    echo "Error: " . mysql_error(); 
} 
+0

ありがとう、それは私が探していたものです! – netrox

+0

@netroxこの回答を受け入れると、あなたの受け入れ率は高くなります。 –

+0

10分が経過するのを待っています:/ – netrox

5

元の質問のタイトルの点では - できません。 dieおよびexitの目的は、スクリプト処理を終了することです。スクリプトの処理を終了しない場合は、dieまたはexitを呼び出しないでください。

エラーの出力を抑制する観点からは、error control operator@)を使用することができますが、お勧めできません。 (あなたは、このようにエラーを抑制している場合は、は、エラーのためチェックは自分自身を述べなければなりません。)

はたとえば、あなたが使用できます。

$result = @mysql_query($sql); 
if(is_resource($result)) { 
    // The query worked... 

} 
else { 
    // Handle error state, perhaps using mysql_error 
} 

をしかし、これだけ明確な、を作るためにNEVERエラーサプレッサーを関数呼び出しに追加します。あなた必ずあなた自身が正しく潜在的なエラーを処理していることを確認してください。

1

あなたは、本番環境で、とにかくやりたいエラー報告をオフにすることができますするmysql_query

$result = mysql_query($sql); 
if ($result===false) { 

echo 'The Query failed'; 
} 

//> Continue 
0

の戻り値の型を確認してください。

error_reporting(0); 

これでもエラーは発生しますが、表示されなくなります。

これは非常に珍しいことですが、私は、なぜ誰かがmySQLエラーを受け入れることを望む理由を考えることはできません - 問題がSQLに壊れている場合は、通常は事前にそれをキャッチします。

+0

MySQLのエラーはうまくいく可能性があります。たとえば重複したキーエラーが発生した場合、ユーザー名/ URL /が既に存在しているというメッセージをユーザーに表示して続行します。 – ceejayoz

+1

@ceejayoz私はそれをあらかじめキャッチしたいと思う傾向があります。私は、たとえサーバーに到達できなくても、エンドユーザーに生のSQLエラーメッセージを表示するのは嫌いです。 –

+0

生のエラーメッセージを表示する必要はありません。エラーが何であったかを調べるには、mysql_errno()を使い、それを処理してください。 – ceejayoz

0

あなたはされているはずですキャッチ(死なない/を試してみてください)、または終了

+1

ああ、老朽化し​​たmysql拡張は例外をスローしないので、試しても捕まえることもありません。 PDOが使用されていればこれは正しいでしょう。 – Charles

+0

@charles:例外をスローするためにラッパーレイヤーを使用するもう1つの理由、またはerrerexceptionsを使用します。だからそれを動作させる方法があります... – ircmaxell

2
$result = mysql_query($sql) or print("error with responses"); 

エコーは、あなたが何をしようとして、論理比較に使用することはできません。代わりにprintを使用してください。PHPエラーは発生しません。

1

2番目の関数呼び出しとしてdieを使用する必要はありません。ほとんどすべてのmysql_queryチュートリアルのコンベンションとして使用されています。

ブール式を評価するだけです。 $result = $a OR $b$aの値がtrueの場合は、必ずしも$bを実行することはありません。我々は論理ORを満足しています。オペレータの片側が真であり、それだけで十分です。

die()機能は、すぐにメッセージでスクリプトを終了します。あなたは終了せず、かなりのエラーメッセージを出力し、スクリプトを続行するために、独自の機能でそれを置き換えることができ、例えば:。

function my_error_function($status) { 
    echo "ERROR: $status"; 
} 

$result = mysql_query($sql) or my_error_function("Uhoh. There was a problem executing $sql."); 
関連する問題