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

时间:2010-05-08 17:09:22

标签: mysql sql-update

我有一个查询,用户在textarea字段中键入一个文本块。他们能够将这些信息保存在数据库中。问题是,如果他们没有更改信息或信息与数据库中已有的数据匹配,我会收到受影响行的“0”。通常我会显示一个错误,指出在没有受影响的行时查询失败。我怎么知道0受影响的行是因为数据已经存在,所以我可以显示更具体的错误?

2 个答案:

答案 0 :(得分:3)

如果UPDATE语句不匹配任何行,则获得0个受影响行的另一个原因。例如:

UPDATE MyTable SET field = 'content' WHERE id = 1234;

如果id = 1234不存在任何行,则会产生0个受影响的行。这也不是错误,只是UPDATE碰巧没有匹配行。

检测此案例的方法是使用SELECT来验证是否存在这样的行。如果您可以确认该行存在,但UPDATE表示它影响了0行,那么您知道您尝试更改的值实际上是数据库中已存在的行。

SELECT COUNT(*) FROM MyTable WHERE id = 1234;

但这种区别可能并不重要。如果mysql_error()表示存在错误,您可以报告错误,正如@BoltClock建议的那样。* 如果没有错误,您只能向用户报告“无变化”。

  

* 注意:必须报告mysql_error()返回的文字消息。这些消息可能会让用户感到困惑,因此向他们报告更友好的内容是个好主意。

答案 1 :(得分:2)

由于查询成功,MySQL不应返回任何错误编号(如果它确实为0)。在这种情况下,您可以检查受影响的行数是否为0 返回的错误号是否为0.

如果您使用PHP进行编码,则可以执行以下操作:

// ... mysql_query() with the UPDATE query

if (mysql_affected_rows() == 0 && mysql_errno() == 0)
{
    // Data was not changed
}