当查询中传递的数据与数据库中已有的数据相同时,如何确定MySQL更新查询是否成功?

时间:2011-05-25 21:39:57

标签: php mysql error-handling rows-affected

假设您有一个包含数据库中预先填充数据的表单,您允许用户进行更改并保存表单。如果用户单击保存按钮而不进行任何更改,MySQL将不会实际执行写操作,因此affected_rows将返回0.

我理解这种行为,但除了检查受影响的人数之外,确定更新是否失败的最佳做法是什么?

区分实际失败的更新和“成功”但导致0 affected_rows的更新以便我可以向用户提供反馈的最佳做法是什么?

4 个答案:

答案 0 :(得分:6)

检查执行查询后是否发生错误 如果您使用mysql,请检查mysql_error()
if (!mysql_error()) print 'all is fine';
mysqli也是如此。

答案 1 :(得分:4)

  

[affected_rows()] [1]如果查询失败则为-1,而不是零。

     

[1]:http://www.php.net/manual/en/function.mysql-affected-rows.php

如果没有对该行进行任何更改(相同的值),或者如果mysql没有找到要更新的行,则它可能返回0。它只返回-1到期语法错误

答案 2 :(得分: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();
}

答案 3 :(得分:2)

如果由于语法错误导致更新“失败”,或者其他mysql将在实际的mysql查询中返回错误代码,且affected_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