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

10
假设您有一个表单,其中包含来自数据库的预填数据,并且您允许用户进行更改并保存该表单。如果用户在没有进行任何更改的情况下点击保存按钮,MySQL实际上将不执行写操作,因此affected_rows将返回0。
我理解这个行为,但是除了检查affected_rows的数量之外,如何确定更新失败的最佳实践呢?
区分实际失败和“成功”但结果为0 affected_rows的更新的最佳做法是什么,以便我可以向用户提供反馈?
4个回答

6

只需在查询执行后检查是否发生错误。
如果您使用的是mysql,请检查mysql_error()
if (!mysql_error()) print '一切正常';
对于mysqli也是同样的方法。


更新操作不会因为你没有更新任何内容而返回错误。查询已成功执行。mysql_affected_rows($db)mysqli_affected_rows($db) 是正确的函数。 - m3nda

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

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

$sql = "sql statement"; mysql_query($sql)or die(mysql_error()); if(mysql_affected_rows() || mysql_affected_rows() == 0){ // no error }else{ // error } - Neo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接