2013-12-17 10 views
5

私はこのような問題についていくつかの記事を読んだことがありますが、それらのどれも私を助けず、何をすべきか混乱しています。mysqliクエリが成功したかどうかを確認する正しい方法

基本的に、SQLクエリがエラーなしで実行されたかどうかを確認したいと思います。これを行うには、以下に示すifステートメントの両方を使用する必要がありますか?

if($stmt = $mysqli->prepare("INSERT INTO table VALUES (?, ?, ?);")) 
{ 
    $stmt->bind_param("sss", $a, $b, $c); 

    if(!$stmt->execute()) 
    { 
     // Do I have to catch the problem here? 
    } 

    if($stmt->affected_rows === -1){ 
     // Do I have to catch the problem here? 
    } 

    $stmt->close(); 
} 
else 
{ 
    // Do I need to catch the problem here? 
} 
+0

*なぜ*結果を確認しますか?あなたはそれと何をするつもりですか? –

+0

データが保存されているかどうかを知る必要があります(この場合)。何か問題が発生したために、そのことを知り、この問題についてユーザーに通知する必要があります... – 0101

+0

問題がmysqliではなく、 ?別の通知を書くつもり?ファイルシステムエラー、ゼロ除算、変数の欠落はどうですか? –

答えて

1

あなたはprepare()bind_param()と​​の戻り値をチェックする必要があります。彼らはすべて失敗した場合falseを返します。

​​がfalseが、その後INSERTが正常に通過したはずです、そしてあなたが影響を受けた行数をお知りになりたい場合は、したがってaffected_rowsをチェックするだけで理にかなって返さない場合。

0
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 

この行をmysqli connectの上に置きます。これはあなたが必要なすべてです。

問題をユーザーに通知するには、AJAX要求の応答ステータスを確認します。それが500なら、保存に問題がありました。

+0

ありがとうございます。もう1つ質問があります。これで十分ではないと私はいくつかのレポートを作ってみたい、私は例えば、特定のエラーについて私の自己にメールを送信することを意味します。この場合、どのオプションが最適ですか? – 0101

+0

*本当のケースを教えてください。だから私はあなたに最も適したオプションを教えてくれます。ある特定のmysqlエラーの場合にメールを送信することはあまりにも人工的なケースです。 –

+0

一部のブロックでエラーが発生した場合(上記のコメントがあります)、その場所からメールを送信したい、または別のWebサイトにリダイレクトします。今私はそれを行うための最善の方法を考えています。これらの場所で起こりうるエラーをすべてキャッチするか、try {} catch(){}を使用する必要がありますか? – 0101

関連する問題