一尘不染

mysql_real_escape_string VS加上斜线

mysql

有人可以从PHP手册中了解这两个函数之间的区别吗?

addslashes:返回一个字符串,在数据库查询等中需要加引号的字符之前带有反斜杠。这些字符是单引号(’),双引号(“),反斜杠()和NUL(空字节)。

mysql_real_escape_string:mysql_real_escape_string()调用MySQL的库函数mysql_real_escape_string,该函数将反斜杠附加到以下字符:\
x00,\ n,\ r,\,’,’和\ x1a。

从我收集到的主要区别是\ x00,\ n \ r \ x1a不会引起冲突,您能告诉我它的意义是什么吗?

谢谢


阅读 216

收藏
2020-05-17

共1个答案

一尘不染

您引用的内容可能来自文档,但据我所知不一定是正确的。

addslashes在通常令人不安的字符上添加斜杠。mysql_real_escape_string转义MySQL需要转义的所有内容。这可能比addslashes需要照顾的字符更多或更少。

同样,mysql_real_escape_string也不一定会添加斜杠来进行转义。尽管我认为这样做是可行的,但最新版本的MySQL通过将两个引号放在一起而不是在其前面加上斜线来转义引号。

我认为您应该始终使用数据提供程序的转义功能而不是addslashes,因为addslashes可能会执行过多或不足的工作以达到使用目的。另一方面,mysql_real_escape_string
知道
如何做准备将字符串嵌入查询中的字符串。即使规范更改了如何转义的内容,并且突然之间您不再使用反斜杠,您的代码仍然可以正常工作,因为您mysql_real_escape_string会意识到这一点。

2020-05-17