我们为什么要逃避双引号,单引号在PHP中创建查询

时间:2012-06-11 05:40:51

标签: php mysql double-quotes magic-quotes

为什么我们应该使用双引号,单引号在PHP中创建查询?这样做有什么特别的好处吗?或者这只是一个好习惯?

3 个答案:

答案 0 :(得分:3)

要求您的查询有效且安全。请考虑以下代码:

$name = "O'reilly";
$sql  = "INSERT INTO users (name) VALUES ('$name')";

结果SQL会变成这样:

INSERT INTO users (name) VALUES('O'reilly');

这根本行不通。它需要正确转义:

INSERT INTO users (name) VALUES('O\'reilly');

同样适用于其他特殊字符。


防止SQL注入

考虑这个问题:

DELETE FROM users WHERE username='$username';

$username获取$_POST的位置。如果攻击者设法将' OR 1; --之类的字符串发布为$username,则查询会变为:

DELETE FROM users WHERE username='' OR 1; -- ';

这是有效的,WHERE总是评估为真,你必须向愤怒的用户提供很好的解释。

另请参阅:Best way to prevent SQL Injection in PHP

答案 1 :(得分:0)

如果您不转义引号,则查询将在单引号的位置结束。因此,您的查询将无法成功执行!

E.g。

$qry = "SELECT * FROM user WHERE email='test@test.com'";

它工作正常,但如果有人输入email='test'@test.com',那么查询仅以“test”结束,而不会找到任何一行。

所以它也会阻止sql注入!

答案 2 :(得分:0)