如何通过 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 的情况下如何正确转义字符串?
将数据从 js 发送到 php、php 到 mysql 以及 REST json 响应时所需的正确编码/转义/htmlentities 是啥