为什么我们要转义双引号,单引号在 PHP 中创建查询?这样做有什么特别的好处吗?或者这只是一个好习惯?
问问题
1638 次
3 回答
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
总是评估为真,您必须向愤怒的用户提供良好的解释。
于 2012-06-11T05:46:45.303 回答
0
s,防止SQL注入攻击。了解 SQL 注入 http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php http://www.homeandlearn.co.uk/php/php13p5.html
防止 PHP Sql 注入 https://stackoverflow.com/a/60496/781181
于 2012-06-11T05:56:09.527 回答
0
如果不转义引号,则查询在单引号处结束。所以你的查询不会成功执行!
例如
$qry = "SELECT * FROM user WHERE email='test@test.com'";
它工作正常,但如果任何人输入 email='test'@test.com' 则查询仅在 'test' 处结束,并且找不到任何包含该行的行。
所以它也可以防止sql注入!
于 2012-06-11T05:47:07.020 回答