我有一個名爲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