首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何知道MySQL UPDATE查询是否因为提供的信息与数据库中已有的数据匹配而失败?

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

Stack Overflow用户
提问于 2010-05-09 01:09:22
回答 3查看 10.2K关注 0票数 4

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-09 01:22:49

得到0个受影响的行的另一个原因是如果UPDATE语句没有匹配任何行。例如:

代码语言:javascript
复制
UPDATE MyTable SET field = 'content' WHERE id = 1234;

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

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

代码语言:javascript
复制
SELECT COUNT(*) FROM MyTable WHERE id = 1234;

但区别可能并不重要。如果mysql_error()说有一个错误,你可以报告一个错误,就像@BoltClock建议的那样。*如果没有错误,你可以只向用户报告“没有变化”。

*注意:您不必报告mysql_error()返回的文字消息。这些消息可能会让用户感到困惑,所以最好向他们报告一些更友好的消息。

票数 4
EN

Stack Overflow用户

发布于 2010-05-09 01:16:04

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

如果你用PHP编写代码,你可以这样做:

代码语言:javascript
复制
// ... mysql_query() with the UPDATE query

if (mysql_affected_rows() == 0 && mysql_errno() == 0)
{
    // Data was not changed
}
票数 3
EN

Stack Overflow用户

发布于 2021-10-02 09:34:14

来补充上面的答案。

代码语言:javascript
复制
$sth = $Param->{dbh}->prepare($sql);   
$rows_affected = $sth->execute()  
or die "SQL Error: $DBI::errstr\n";      
if ( $rows_affected eq '0E0' ) {    
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2794924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档