MySQL QUOTE() 与 mysql_real_escape_string()?
Posted
技术标签:
【中文标题】MySQL QUOTE() 与 mysql_real_escape_string()?【英文标题】:MySQL QUOTE() vs mysql_real_escape_string()? 【发布时间】:2012-07-23 10:34:03 【问题描述】:在 mysql 中,QUOTE()
和 mysql_real_escape_string()
有什么区别?从 MySQL 文档中,我知道以下内容:
QUOTE()
写入 SQL 查询 转义反斜杠、单引号、NUL、CTRL+Z 返回单引号字符串 行为依赖于 MySQL 服务器的字符集mysql_real_escape_string()
在执行查询之前用 C/C++ 编写,允许在提交之前读取/修改转义字符串 与QUOTE()
相比使用起来非常不方便
转义反斜杠、单引号、NUL、CTRL+Z 和 双引号、\n 和 \r
显然添加了更多引号以使字符在日志文件中易于阅读
行为依赖于 MySQL 服务器的字符集
忽略日志,转义\n
和\r
字符有用吗?有了这两个功能,客户端/服务器功能效率有区别吗?如果开发人员希望在输入查询之前处理转义字符串,mysql_real_escape_string()
听起来很有用。但是,QUOTE()
没有提供最安全可靠的字符串转义方法吗?
我想知道是否应该将QUOTE()
用于所有语言的所有查询,而忘记使用特定于语言的函数转义字符串。
QUOTE() mysql_real_escape_string() String Literals
【问题讨论】:
【参考方案1】:QUOTE()
似乎是要在构造其他 SQL 语句的 SQL 语句中使用。如果您不在 SQL 范围内,则应使用 mysql_real_escape_string()
。
[...] 在 C 程序中,您可以使用
mysql_real_escape_string()
C API 函数来转义字符。 [...] 在构造其他 SQL 语句的 SQL 语句中,您可以使用QUOTE()
函数。
正如String Literals (MySQL Manual)底部的解释。
【讨论】:
【参考方案2】:QUOTE()
已经在查询中,所以它就像你没有放任何东西一样容易突破。 mysql_real_escape_string
对于让任意字符串安全地插入查询至关重要。
使用某种别名可以很容易地解决函数名笨拙的问题。我不是 C/C++ 用户,但它没有宏,你可以用它来编写你想要的任何东西,它会被长函数名替换吗?
【讨论】:
所以QUOTE()
不是注射安全的? QUOTE()
什么时候适合使用?我担心的是功能,而不是便利。你说的也是正确的,因为 C++ 有宏。以上是关于MySQL QUOTE() 与 mysql_real_escape_string()?的主要内容,如果未能解决你的问题,请参考以下文章