根据 php.net,我应该使用 mysql_real_escape_string()并关闭 magic quotes ,因为它已被弃用。
所以我把它关掉了,我使用了mysql_real_escape_string(),但是像下面的代码一样使用它就够了吗?
$value = "It's Time!";
$escaped_value = mysql_real_escape_string($value);
mysql_query("INSERT INTO table (column, column2) VALUES ('{$escaped_value}', "0")");
当我检查数据库中的数据时,它看起来与 $value 中的数据相同,所以 "It's Time"
而不是 "It\'s Time"
。这是正常的吗?这不应该在引号前添加斜杠吗?
最佳答案
这是正确的行为,而且有效!引号在查询中被转义,而不是在数据库中。 SQL 查询中的\' 必须在数据库中转换为 '。
您对字符串进行转义,因此 SQL 查询不会被搞乱,并允许将引号输入数据库,而 SQL 查询不会将它们解释为控制字符。
您的转义查询将是:
mysql_query("INSERT INTO table (column, column2) VALUES ('It\'s time', "0")");
你的数据库数据应该是“It's time”。
如果没有转义,它将是:
mysql_query("INSERT INTO table (column, column2) VALUES ('It's time', "0")");
它会吐出一个关于“s time”的错误(因为它只会解释到下一个引号字符,并且只会看到“It”。)和“It's time!”只是一个无害的字符串,但如果您不对字符进行转义,可能会引发许多攻击。
关于php - 在 SQL 中转义引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4863239/