MySQL QUOTE()vs mysql_real_escape_string()?

时间:2012-07-25 03:20:24

标签: c++ mysql c

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


2 个答案:

答案 0 :(得分:3)

似乎QUOTE()意味着在构造其他SQL语句的SQL语句中使用。如果您不在SQL之外,则应使用mysql_real_escape_string()

  

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

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

答案 1 :(得分:0)

QUOTE()已经在查询中,所以它就像你没有放任何东西一样容易被打破。 mysql_real_escape_string对于在查询中推送任意字符串是必不可少的。

通过使用某种别名可以轻松解决函数名称难以解决的问题。我不是C / C ++用户,但是它没有你可以使用的宏来写你想要的任何东西,它会被长函数名取代吗?