2017-03-27 9 views
0

MySQL Updateコマンドは、条件に一致する行がない場合、または一致する行が実際に変更されていない場合に影響を受けるゼロ行を報告します。mysql影響を受けていない行の数は有益ではない

ユーザは自分のプロファイルを編集したいので、DBに行"WHERE UserID='$userid'"を照会し、編集するためのテキストフィールドに各列の値とともにフォームを表示します。

私はUpdateコマンドを実行し、成功のために1、失敗の場合は0を期待して、mysqli_affected_rowsを確認します。彼が実際に何かを変更しなかった場合、それは0に戻ってきます。私は誤ったエラー報告を受け取ります。

私はこれを避けるためにいくつかの面倒な方法があると思っていますが、誰かが簡単に解決できると思っていますか?

+0

常に更新されるupdated_atフィールドを追加できます。かなり一般的です。 – Christopher

+0

ユーザーに通知しないでください。または、特定の通知を追加する - > "あなたは何も変更していない" Christopherが提案したようにupdated_atフィールドを追加してチェックしてください。 – Tim

+0

はい、LastUpdate列は、私が考えていた「面倒な」アプローチです。私はちょうどコードを乱雑にしてDBを拡張することが嫌いです – joseph4

答えて

0

これは簡単です。

この無駄なチェックを取り除き、単にデータが正常に更新されたことをユーザーに伝えます。

+0

何かが間違っている可能性は非常に低いですが、それはチェックしないで少しうんざりです。 – joseph4

+0

@ joseph4あなたは、影響を受けた行の#が何かと間違っていることに気が付かなければなりません。チェックしたい場合は、影響を受けた行数ではなく何かが間違っているかどうかをチェックする必要があります。 –

+0

しかし、間違っているかどうかを確認するために、すべての単一行をチェックするならば、コードがちょっと乱雑になります。 –

1

影響を受けた行を返すことは実際にはエラーではありません。実際のSQLクエリがまだ成功している間は、多くのことは何の影響もありません。実際のエラーがmysqli_affected_rowsによって報告されると、0ではなく-1が返されます。

また、実際のエラーをキャッチする場合は、mysqli_errnoなどのコマンドを代わりに使用することをお勧めします。 。

「OK」/「ありがとう」などと言って、実際のエラーがあった場合にのみ通知することをお勧めします。

関連する問題