php - 在 SQL 中转义引号

标签 php sql mysql mysql-real-escape-string magic-quotes

根据 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/

相关文章:

mysql - 我想在 mysql 子查询中获取别名的总和

SQL - 在两个连续记录中减去日期,然后求平均值

php - SYMFONY2 如何在帖子中添加多个标签和类别

mysql - Pentaho "Couldn' t 从结果集中获取行“错误

php - 如何使用CSS水平对齐

java - 在Java中我怎么能在这里做文档?像 BASH 或 PHP 我们可以

php - 将表格暴露给 View

php - 连接到 WordPress 服务器中的 mysql 数据库

java - Spring JDBC - 将 BLOB 数组传递给 SQL 函数

php - 在 sql 查询中检查两个独立的事物