我有一个名为user_ips
的表来跟踪用户,以防他们删除他们的cookie或更改浏览器。无论如何,下面的代码很简单。它更新user_ips中与用户ID和IP相同的条目。如果查询没有更新任何行,那么这意味着该用户的IP不在表中,因此它会插入它。奇怪的行为与PHP中的mysql_affected_rows()
$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,所以它不需要引号。
这很有道理谢谢。 – fent 2009-07-27 14:00:10