Possibilites @mysql_affected_rows return Values?


Possibilites @mysql_affected_rows return Values?

有没有人能告诉我@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);
}

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

你真正需要的不是mysql_affected_rows(),而是一个不允许竞争条件的查询。

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