我最近写了一个脚本,每十分钟写一次数据库。该脚本的目的是在存在该用户的记录时更新记录,否则它会为该用户插入记录。
数据库有三个重要字段id
username
ip
。
随着IP更改,脚本将更新该用户的IP字段或为具有新IP的用户添加记录,并在下次运行时更新IP而不是添加记录。
我试图找出知道记录是否存在的最佳方法,以便我可以更新而不是插入。
我以前在更新语句之后使用$f->rowCount()
,即
if($f->rowCount() > 0){ continue; }else{ the insert statement}
因此,如果受影响的行大于0,我知道该记录存在。但是,如果IP未发生变化,则实际上没有更新,$f->rowCount()
将等于0
。
现在我只需选择所有记录并将它们存储在一个数组中,检查用户名是否为in_array
如果有更新,否则执行插入操作。是否有更好或更快的方法来确保记录是否存在,而无需进行选择?
我的问题是看看是否存在与$f->rowCount()
类似的东西,因为我前几天才发现这一点。非常感谢
答案 0 :(得分:2)
您可以将这三列放入唯一键中。这将允许您使用
INSERT ... ON DUPLICATE KEY
查询表达式:
INSERT INTO `users`
([other fields], `username`, `ip`)
VALUES ([values for other fields], [user name], [IP address])
ON DUPLICATE KEY
UPDATE [other fields]=[other values], `username`=[user name], `ip`=[IP address]
答案 1 :(得分:1)
silkfire的回答看起来很有希望。但如果您不想更改表格中的唯一键,为什么不更改rowCount()
的查询?
例如:
SELECT COUNT(*) FROM `users`
WHERE `ip` = [IP address]
AND 'username' = [user name]
看起来你正在使用PDO;因此,对于此语句中的$f->fetchColumn()
,您将知道此确切组合是否已存在。你也会知道它是否存在多次。