0

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

4

3 回答 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总是评估为真,您必须向愤怒的用户提供良好的解释。

另请参阅:在 PHP 中防止 SQL 注入的最佳方法

于 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 回答