MySQL QUOTE() vs mysql_real_escape_string()?

MySQL QUOTE() vs mysql_real_escape_string()?

本文关键字:escape string real mysql QUOTE vs MySQL      更新时间:2023-10-16

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

QUOTE()

  • 写入SQL查询
  • 转义反斜杠、单引号、NUL、CTRL+Z
  • 返回单引号字符串
  • 行为依赖于MySQL服务器的字符集

mysql_real_eescape_string()

  • 在执行查询之前用C/C++编写,允许在提交之前读取/修改转义字符串
  • QUOTE()相比,使用起来非常不便
  • 转义反斜杠、单引号、NUL、CTRL+Z和双引号、\n和\r
  • 显然,添加了更多的引号,使字符在日志文件中易于阅读
  • 行为依赖于MySQL服务器的字符集

忽略日志,转义nr字符有用吗?有了这两种功能,客户端/服务器的功能效率是否有差异?如果开发人员希望在转义字符串输入查询之前对其进行处理,那么mysql_real_escape_string()听起来很有用。然而,QUOTE()是否没有提供最安全可靠的字符串转义方法?

我想知道是否应该对所有语言的所有查询使用QUOTE(),而忘记使用特定语言函数转义字符串。


  • QUOTE()
  • mysql_real_eescape_string()
  • 字符串文字

QUOTE()似乎是用来在构造其他SQL语句的SQL语句中使用的。如果您不在SQL中,则应该使用mysql_real_escape_string()

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

如String Literals(MySQL手册)底部所述。

QUOTE()已经在查询中了,所以它就像你什么都没放一样容易被打破。mysql_real_escape_string对于保证任意字符串在查询中的安全性至关重要。

使用某种别名可以很容易地解决函数名称难以处理的问题。我不是C/C++用户,但它不是有宏可以用来写任何你想要的东西吗?它被长函数名取代了?