【问题标题】:Possibilites @mysql_affected_rows return Values? [duplicate]@mysql_affected_rows 返回值的可能性? [复制]
【发布时间】:2013-06-10 19:59:45
【问题描述】:

谁能告诉我@mysql_affected_rows 返回值的所有可能性。因为我正在检查if(@mysql_affected_rows())。在大多数情况下,它返回 1(成功)或 0(不成功)。所以它工作正常。但在某些情况下,如果更新不成功,它会返回 0 以外的其他值。

我不知道它会返回什么。但它进入了循环。在循环内部我试图插入数据。但它为此在 SQL 上显示重复错误。请检查以下代码供您参考,

$sqlU = sprintf("UPDATE %s SET count = count + 1
                            WHERE id = %d", 'table', 123);
mysql_query($sqlU);
if(!@mysql_affected_rows()) {
    $sqlI = sprintf("INSERT INTO %s (id) VALUES (%d)",
                                'table', 123);
    mysql_query($sqlI);
}

【问题讨论】:

  • 你为什么使用if(!@mysql_affected_rows()) {
  • PHP 文档告诉您它会返回受影响的行数或失败时返回 -1.. 在不询问 SO 的情况下获取信息并不难。另一方面,您正在使用一种已弃用的方式来处理数据库通信,而且您没有检查您的查询是否成功——基本上,您的代码中发生了太多不好的事情。你应该看看 PDO。
  • 您的代码也毫无意义。为什么UPDATE 一行然后INSERT 又是同一行?
  • 既然你已经得到了正确的答案,为什么还要在两个小时内两次问同一个问题?

标签: php mysql


【解决方案1】:

首先,mysql_* 函数已弃用。 mysql_affected_rows() 似乎在所有情况下都返回一个整数。如果查询失败,则返回-1

您真正需要的不是mysql_affected_rows(),而是一个不对竞争条件开放的正确查询。

INSERT INTO table (id, count) VALUES (123, 0) ON DUPLICATE KEY UPDATE count = count + 1

【讨论】:

    猜你喜欢
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 2012-08-14
    相关资源
    最近更新 更多