MySQL QUOTE()和mysql_real_escape_string()有什么区别?

5
在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个回答

3
似乎QUOTE()是用于构建其他SQL语句的SQL语句中使用的。如果您在SQL之外,应使用mysql_real_escape_string()。在C程序中,您可以使用mysql_real_escape_string() C API函数来转义字符。在构造其他SQL语句的SQL语句中,您可以使用QUOTE()函数。详见字符串字面量(MySQL手册)底部的说明。

0

QUOTE() 已经在查询中了,所以它和没有放置任何内容一样容易被打破。 mysql_real_escape_string 是必要的,可以使任意字符串安全地插入到查询中。

函数名称不太方便的问题可以通过使用某种别名来轻松解决。我不是 C/C++ 用户,但它是否有宏可以使用,从而可以写任何您想要的内容,并将其替换为长函数名称?


那么 QUOTE() 不安全防注入吗?什么情况下使用 QUOTE() 是合适的?我担心的是功能,而不是方便性。您也正确指出 C++ 有宏。 - xikkub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接