gpt4 book ai didi

php - PHP 中 mysql_affected_rows() 的奇怪行为

转载 作者:可可西里 更新时间:2023-11-01 07:48:37 25 4
gpt4 key购买 nike

我有一个名为 user_ips 的表来跟踪用户,以防他们删除 cookie 或更改浏览器。所以无论如何,下面的代码很简单。它更新 user_ips 中等于用户 ID 和 IP 的条目。如果查询没有更新任何行,则意味着该用户的 IP 不在表中,因此将其插入。

$site->query('UPDATE `user_ips` SET `last_time` = UNIX_TIMESTAMP(), `user_agent` = \''.$this->user_agent.'\' WHERE `ip` = '.$this->ip.' AND `userid` = '.$this->id);
if(mysql_affected_rows() == 0)
{
$site->query('INSERT INTO `user_ips` SET `userid` = '.$this->id.', `ip` = '.$this->ip.', `first_time` = UNIX_TIMESTAMP(), `last_time` = UNIX_TIMESTAMP(), `user_agent` = \''.$this->user_agent.'\'');
}

问题是 mysql_affected_rows() 有时会返回 0,即使存在具有用户当前 ID 和 IP 的行。因此,代码会向表中添加具有相同 IP 的另一行。

如果您想知道,$site 是我为我的网站创建的 mysql 类,它执行的唯一查询是 query() 传递给它的查询,仅此而已,所以这不是该类的问题。哦,IP 存储为长 IP,因此不需要引号。

最佳答案

我在这里直接引用 PHP 文档:

使用 UPDATE 时,MySQL 不会更新新值与旧值相同的列。这导致 mysql_affected_rows() 实际上可能不等于匹配的行数,而只等于实际受查询影响的行数。

因此,在您的情况下,当 UNIX_TIMESTAMP() 返回相同的值(例如,同一秒内来自同一客户端的两个请求)时,mysql_affected_rows() 将返回 0。

关于php - PHP 中 mysql_affected_rows() 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1188232/

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