已执行Mysql查询 - 确认查询已正确执行

时间:2014-11-26 09:19:42

标签: php mysql

我最近写了一个脚本,每十分钟写一次数据库。该脚本的目的是在存在该用户的记录时更新记录,否则它会为该用户插入记录。

数据库有三个重要字段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()类似的东西,因为我前几天才发现这一点。非常感谢

2 个答案:

答案 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(),您将知道此确切组合是否已存在。你也会知道它是否存在多次。