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

Posted

技术标签:

【中文标题】当查询中传递的数据与数据库中已有的数据相同时,如何确定 MySQL 更新查询是不是成功?【英文标题】:How to determine if a MySQL update query succeeded when the data passed in the query is the same as what is already in the database?当查询中传递的数据与数据库中已有的数据相同时,如何确定 MySQL 更新查询是否成功? 【发布时间】:2011-09-02 03:27:38 【问题描述】:

假设您有一个包含数据库中预填充数据的表单,并且您允许您的用户进行更改并保存该表单。如果用户在没有做任何修改的情况下点击了保存按钮,mysql实际上不会执行写操作,因此affected_rows将返回0。

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

更新永远不会因为您没有更新而返回错误。查询执行正常。 mysql_affected_rows($db)mysqli_affected_rows($db) 是正确的。【参考方案2】:

如果由于语法错误导致更新“失败”,或者其他 mysql 将在实际 mysql 查询上返回错误代码,并且受影响的行将返回另一个错误。

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 【参考方案3】:

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

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

如果没有对行进行更改(相同的值),或者如果 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();

【讨论】:

以上是关于当查询中传递的数据与数据库中已有的数据相同时,如何确定 MySQL 更新查询是不是成功?的主要内容,如果未能解决你的问题,请参考以下文章

如何知道 MySQL UPDATE 查询是不是因为提供的信息与数据库中已有的数据匹配而失败?

批量更新数据不成功

使用 Python 将 Csv 文件写入 SQL Server 数据库中已有的表

django如何连接Mysql中已有的数据库

java怎样判断输入的数据与数据库中已有的数据重复

如何利用c++ 把数据加入到txt文件的末尾而不覆盖文件中已有的数据