为什么我的查询不起作用?

时间:2011-01-09 00:34:57

标签: php mysql sql-injection

我的网站有PHP命令:

mysql_query("SELECT * FROM users WHERE id=" . $_GET["id"]) or die(mysql_error());

当我输入网址

http://example.com/index.php?id=1;%20UPDATE%20users%20SET%20password=123%20WHERE%20id=1

我收到以下错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE users SET password=abc WHERE id=1' at line 1

但是在phpmyamin查询中执行成功。这有什么不对?为什么它不能在浏览器中执行?

2 个答案:

答案 0 :(得分:7)

mysql_query()发送唯一查询(不支持多个查询)”

如果你想要允许这样的mysql注入,mysql_query将不喜欢它。如果不是,请mysql_real_escape_string($_GET["id"]);阻止“注射”

答案 1 :(得分:4)

mysql_query()不支持单个调用中的多个查询(您尝试注入):

SELECT * FROM users WHERE id=1;
UPDATE users SET password=abc WHERE id=1

因此“语法错误”。

现在去保护那个查询。