mysql真正的转义字符串 - 这是正常的吗?

时间:2012-07-11 23:47:41

标签: php mysql mysqli mysql-real-escape-string

当我使用mysqli-> real_escape_string并向数据库添加字符串值(例如“who's”)时,它会添加字符串而不会以任何方式修改引号。当我检查db时,其中的值是“who's”。

当我不使用mysqli-> real_escape_string并添加一个像“who's”这样的单引号的字符串时,它就不会被添加到数据库中。它无处可寻。

这不正常,是吗?

3 个答案:

答案 0 :(得分:2)

是的,确实如此。以比这更详细的方式回答这个问题有点困难。

real_escape_string()只有转义数据,以便可以在查询中安全地使用它,它不会以任何方式修改它。如果不对其进行转义,则查询中会出现语法错误,因此失败 - 并且未插入数据。

然而,逃避数据的最安全方法是使用prepared statements

答案 1 :(得分:1)

这是正常的,是正确的。 real_escape_string允许将您的字符串添加到数据库(包括引用)。没有它,撇号会干扰SQL,因此可能会抛出错误,这就是为什么它“无处可寻”。

答案 2 :(得分:1)

real_escape_string的作用是,只有在在数据库中添加这些字符时才会转义必需的字符。所以它就像在PHP中的字符串中转义相同类型的引用,例如:

$str = 'We escape single quotes like in O\'Connor';

单引号(撇号)是为了防止代码中断,但字符串值实际上并不包含它。同样...

INSERT INTO table (`name`) VALUES ('O\'Connor')

在此示例中,反斜杠不会插入行中。当然,这是出于安全原因。检查Hackipedia's page以查看一些可能的情况。

希望这就是你所要求的。