5

QUOTE()在 MySQL 中,和之间有什么区别mysql_real_escape_string()?从 MySQL 文档中,我知道以下内容:

引用()

  • 写入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()所有语言的所有查询并忘记使用特定于语言的函数转义字符串。


4

2 回答 2

3

这似乎QUOTE()是为了在构造其他 SQL 语句的 SQL 语句中使用。如果您不在 SQL 范围内,则应使用mysql_real_escape_string().

[...] 在 C 程序中,您可以使用mysql_real_escape_string()C API 函数来转义字符。[...] 在构造其他 SQL 语句的 SQL 语句中,您可以使用该QUOTE()函数。

正如String Literals (MySQL Manual)底部所解释的那样。

于 2012-12-03T21:38:02.647 回答
0

QUOTE()已经在查询中,所以它就像你没有放任何东西一样容易突破。mysql_real_escape_string对于使任意字符串可以安全地插入查询至关重要。

使用某种别名可以很容易地解决函数名称笨拙的问题。我不是 C/C++ 用户,但它没有宏,你可以用它来写你想要的任何东西,它会被长函数名替换吗?

于 2012-07-25T03:24:27.447 回答