我正在制作一个需要检查用户有效性的登录系统。基本上,它需要三个步骤。
从用户输入中获取$username
检查数据库中是否存在$username
SELECT * FROM members WHERE name = $username LIMIT 1
更新$username
的登录信息(例如登录时间,IP,...)
UPDATE members SET ip = $ip WHERE name = $username
在第二步中,假设我已经使用prepared-statement查询(MySQL)数据库,以避免SQL注入。我想在第三步仍然需要使用prepared-statement。
我的逻辑是$username
已经通过了第二步,所以它应该是一个有效的参数。为了节省由于使用prepared-statement而导致的额外服务器往返,似乎没有必要在第三步中使用prepared-statement更新数据库。
我是使用数据库的新手。希望有人能澄清我的问题。 :)
答案 0 :(得分:3)
不!总是用准备好的陈述。您可以传递10个验证,但在第11次删除您的数据库
答案 1 :(得分:0)
如果用户名中包含特殊字符,则会影响您的第二个查询。这被称为second order SQL injection。
答案 2 :(得分:0)
如果$ username在第一行是邪恶的,它将在第二行。
除非您使用从数据库中读取的值覆盖它。