为什么我们应该使用双引号,单引号在PHP中创建查询?这样做有什么特别的好处吗?或者这只是一个好习惯?
答案 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
总是评估为真,你必须向愤怒的用户提供很好的解释。
答案 1 :(得分:0)
如果您不转义引号,则查询将在单引号的位置结束。因此,您的查询将无法成功执行!
E.g。
$qry = "SELECT * FROM user WHERE email='test@test.com'";
它工作正常,但如果有人输入email='test'@test.com',那么查询仅以“test”结束,而不会找到任何一行。
所以它也会阻止sql注入!
答案 2 :(得分:0)