如何通过 PHP 和 mysql 正确转义字符串

Posted

技术标签:

【中文标题】如何通过 PHP 和 mysql 正确转义字符串【英文标题】:How to properly escape a string via PHP and mysql 【发布时间】:2011-08-15 23:06:21 【问题描述】:

有人可以解释在字符串上使用 mysql_real_escape_string 或在列周围包装 `` 之间有什么区别。

例如"insert into table (``column``) values ('$string')"

$escapestring = mysql_real_escape_string($string);
 "insert into table (column) values ('$escapedstring')"

这两者有什么区别,我应该使用什么?谢谢。

【问题讨论】:

您可能不应该使用也不应该使用。使用绑定参数。这是最安全的方法。 use-the-index-luke.com/sql/where-clause/… How can I prevent SQL-injection in php?的可能重复 【参考方案1】:

反引号`和单引号'之间有区别。

反引号旨在转义可能与 MySQL 保留字冲突的表和字段名称。如果我有一个名为date 的字段和一个类似SELECT date FROM mytable 的查询,我需要避免使用date,这样当MySQL 解析查询时,它会将我对date 的使用解释为字段 而不是数据类型 date

单引号' 用于文字值,如SELECT * FROM mytable WHERE somefield='somevalue'。如果somevalue 本身包含单引号,则需要对它们进行转义以防止引号文字过早关闭。

【讨论】:

【参考方案2】:

这两者根本不相关(据我所知)

来自手册:http://php.net/manual/en/function.mysql-real-escape-string.php

转义特殊字符 未转义字符串,考虑到 的当前字符集 连接,以便安全放置 它在 mysql_query() 中。

所以本质上它的作用是,它将转义进入 mysql 查询不安全的字符(这可能会破坏或使查询格式错误)

所以o'reily 会变成o\'reily

【讨论】:

以上是关于如何通过 PHP 和 mysql 正确转义字符串的主要内容,如果未能解决你的问题,请参考以下文章

PHP前台提交json,双一号被转义了,json有一万字符,JS无法替换处理

在没有 PreparedStatement 的情况下如何正确转义字符串?

mysql 转义字符

php 数组转换json中括号转义

将数据从 js 发送到 php、php 到 mysql 以及 REST json 响应时所需的正确编码/转义/htmlentities 是啥

php mysql转义特殊字符的函数都有哪些