クエリで渡されたデータが既にデータベースにあるものと同じ場合に、MySQL更新クエリが成功したかどうかを判断する方法は?

error-handling mysql php rows-affected
クエリで渡されたデータが既にデータベースにあるものと同じ場合に、MySQL更新クエリが成功したかどうかを判断する方法は?

データベースからデータが事前に入力されたフォームがあり、ユーザーが変更を加えてフォームを保存できるようにするとします。 ユーザーが変更を加えずに保存ボタンをクリックすると、MySQLは実際に書き込み操作を実行しないため、影響を受けた行は0を返します。

動作は理解していますが、infected_rowsの数を確認する以外に、更新が失敗したかどうかを判断するためのベストプラクティスは何ですか?

ユーザーにフィードバックを提供できるように、実際に失敗した更新と、「成功」したものの影響を受けた行が0である更新とを区別するためのベストプラクティスは何ですか。

  10  2


ベストアンサー

クエリの実行後にエラーが発生していないかどうかを確認してください。 + mysql`を使用する場合は、http://php.net/manual/en/function.mysql-error.php [mysql_error()]を確認してください:+ if(!mysql_error())print ‘all is fine’; `+ mysqliでも同じです。

6


__
[affected_rows()][1] is -1 if a query fails, not zero.

行に変更が加えられなかった場合(同じ値)、またはmysqlが更新する行を見つけられなかった場合、0を返すことがあります。 構文エラーのため、-1のみを返します

4


バリエーション1:

mysql_query() or die('error');

バリエーション2:

$conn = mysql_query();
if(!$conn) {//Error code here}

バリエーション3:

try {
  $conn = mysql_query();
  if (!$conn) throw new Exception("mysql Error");
} catch(Exception $e) {
  echo $e->getMessage();
}

4


更新が構文エラーのために「失敗」した場合、または他のmysqlが実際のmysqlクエリでエラーコードを返し、impected_rowsがさらに別のエラーを返します。

PHPの例:

$qry = mysql_query("update blah where IamaSyntaxerror,33");
if ($qry === FALSE) { echo "an error has occured"; }

else  { mysql_affected_rows() == 0  means no updates occured

2


タイトルとURLをコピーしました