【问题标题】:Why does mysql_affected_rows return 0 even if one record should be updated为什么即使应该更新一条记录,mysql_affected_rows 也会返回 0
【发布时间】:2009-12-21 15:15:22
【问题描述】:
mysql_query("update users set balance=balance+'$pwbalance'-'$totalprice' where memberid='$memberid' and (balance+'$pwbalance'-'$totalprice')>=0")or die(mysql_error());
$count=mysql_affected_rows();

当我回显 $pwbalance 时,它​​是 40.00; 当我回显 $totalprice 时,它​​是 40; 所以应该有一个记录要更新。但是,当我回显 $count 时,我得到 0。怎么了?

【问题讨论】:

    标签: php sql mysql database


    【解决方案1】:

    只有在更新前后有明显差异时,MySQL才会真正更新一行。你的计算基本上是:

    SET balance = balance + 40 - 40
    

    所以没有任何变化,MySQL 不会将此视为受影响的行。

    旁注:不要在 sql 中单引号数字值。单引号充当字符串分隔符。对于 mysql ,在这种情况下,它们会自动转换为数字,但无论如何这都是不好的做法。

    【讨论】:

    • 我同意 Roland Bouman 的观点;如果$pwbalance 包含在查询中用作整数的值,则不要使用引号。
    【解决方案2】:

    罗兰是对的,显然你想知道查询是否成功,余额保持不变这一事实对你来说并不重要。您可能想要添加一个新字段,例如您在此更新中递增的 purchase_count 或 last_purchase_date,以触发实际更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-18
      • 2021-02-17
      • 2012-01-14
      • 2011-02-12
      • 2020-09-26
      • 2019-04-03
      相关资源
      最近更新 更多