区分“没有行受到影响”和行成功更新为相同值(MySQL 和 PHP)

2023-11-29

我正在从 PHP 执行 SQL (MySQL) 命令。每次执行有几种可能的结果:

  1. 记录更新为新值
  2. 记录已更新,但值恰好相同
  3. 记录找不到要更新的行(即没有行与WHERE clause)

我想知道如何区分 # 的 1 和 3:两种情况都返回零作为受影响的行数,因此:

$result = $db->exec($statement)

将会有$result == 0在这两种情况下。我如何区分?

EDIT:我的意思是问如何区分场景二和场景三,而不是场景一和场景三!带来不便敬请谅解...


一个简单的解决方案是两个查询。

首先,运行 SELECT 查询以使用 mysqli_num_rows() 检查该行是否存在。

然后,如果该行存在,您可以运行 UPDATE 查询并使用 mysqli_affected_rows()。


[EDIT]

...我会为任何寻求单一通话的人建议一个潜在的替代方案。我不知道您是否有兴趣进行任何插入或纯粹的更新。以下是一些值得深思的内容:

来自置顶评论@http://php.net/manual/en/mysqli.affected-rows.php :

在“INSERT INTO ON DUPLICATE KEY UPDATE”查询中,尽管人们可能期望在成功的查询中受影响的行只返回每行 0 或 1,但实际上它可能返回 2。

来自 Mysql 手册:“使用 ON DUPLICATE KEY UPDATE,如果该行作为新行插入,则每行受影响的行值为 1;如果更新现有行,则每行受影响的行值为 2。”

See: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

这是总和明细per row:

+0:行未更新或插入(可能是因为该行已经存在,但在更新期间没有实际更改任何字段值)

+1:插入一行

+2:更新了一行

你能让它满足你的需要吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

区分“没有行受到影响”和行成功更新为相同值(MySQL 和 PHP) 的相关文章

随机推荐