2

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

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

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

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

在这两种情况下都会有$result == 0。我怎么能分辨出区别?

编辑:我的意思是问如何区分场景 2 和 3,而不是 1 和 3!带来不便敬请谅解...

4

1 回答 1

1

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

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

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


[编辑]

...我会为任何寻求单个电话的人建议一个潜在的替代方案。我不知道您是否有兴趣进行任何 INSERT 或纯粹的 UPDATE。以下是一些值得思考的食物:

从顶部评论@ 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。”

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

这是每行的总和细分:

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

+1:插入了一行

+2:更新了一行

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

于 2015-04-22T03:15:01.063 回答