gpt4 book ai didi

php - 区分 'no rows were affected' 和成功更新的行——相同的值(MySQL 和 PHP)

转载 作者:行者123 更新时间:2023-11-29 02:56:59 25 4
gpt4 key购买 nike

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

  1. 记录已更新为新值
  2. 记录已更新,但值恰好相同
  3. 记录发现没有要更新的行(即没有行匹配 WHERE 子句)

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

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

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

编辑:我想问的是如何区分场景二和场景三,而不是场景一和场景三!抱歉给您带来不便...

最佳答案

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

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

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


[编辑]

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

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

在“INSERT INTO ON DUPLICATE KEY UPDATE”查询中,虽然人们可能期望 affected_rows 在成功查询时每行仅返回 0 或 1,但实际上可能返回 2。

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

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

这是每行的总和分割:

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

+1:插入一行

+2:更新了一行

你能做到满足你的需求吗?

关于php - 区分 'no rows were affected' 和成功更新的行——相同的值(MySQL 和 PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29758401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com