MySQL更新问题

时间:2010-10-02 12:40:22

标签: mysql join sql-update

我的mysql查询没有正确更新我的数据库可以帮助我修复这个问题我认为它与JOIN有关。

这是我的mysql查询。

"UPDATE users 
 SET users.last_login = NOW() 
 FROM users JOIN info ON info.user_id = users.user_id 
 WHERE (info.email = '" . $e . "' OR users.username = '" . $e . "') 
 AND users.password = '" . $sha512 . "' 
 AND users.active IS NULL"

这是我使用JOIN之前的工作查询。

"UPDATE users SET last_login = NOW() WHERE (email = '" . $e . "' OR username = '" . $e . "') AND password = '" . $sha512 . "' AND active IS NULL"

2 个答案:

答案 0 :(得分:0)

没有看到表格或生成的SQL,我只是在猜测,正如 Peeka 指出的那样。

我的猜测是你的表中有数据允许(email = '" . $e . "' OR username = '" . $e . "')工作。但是,这是非常开放的 - 更新任何有电子邮件或用户名的记录。当您添加JOIN更严格时 - 更新包含此电子邮件或用户名的记录。

检查你的第二次更新,我打赌它不会更新你认为的记录。如果是,我会说你的外键搞砸了,你没有用户和信息中的匹配数据。其中任何一个都会证明JOIN失败。

如果这没有帮助 - 发布生成的SQL和架构。

答案 1 :(得分:0)

您的查询语法错误。 MySQL中跨表更新的语法有点多  与T-SQL不同。它应该如下。

 UPDATE users JOIN info ON info.user_id = users.user_id
 SET users.last_login = NOW()   
 WHERE (info.email = '" . $e . "' OR users.username = '" . $e . "') 
 AND users.password = '" . $sha512 . "' 
 AND users.active IS NULL

检查以下链接 -

http://blog.ookamikun.com/2008/03/mysql-update-with-join.html