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

标签 mysql sql-update

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

最佳答案

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

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 所建议的那样。* 如果没有错误,您可以向用户报告“无变化”。

* Note: you don't have to report the literal message returned by mysql_error(). The messages can be confusing to users, so it's a good idea to report something more friendly to them.

关于mysql - 如何知道 MySQL UPDATE 查询是否因为提供的信息与数据库中已有的数据相匹配而失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2794924/

相关文章:

mysql - 最大用户数

mysql - SUM 相关表中的时间值

php - 使电话号码可点击以在手机上调用屏幕?

mysql - sql查询仅当它们具有不同的值计数时才显示结果?

java - MySql 中的多个更新语句

c# - SQL UPDATE 循环非顺序键

Mysql更新递增

sql - MySQL:将列分成两列

postgresql - 替换为 Postgres 中的未定义字符

sql - 如何在 SQLite 的 varchar 列中选择带有\u0000(空字符)的行?