这是正常的吗?

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

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

这不正常,是吗?


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

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

然而,逃避你的数据的最安全的方式是使用预先准备的语句。


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


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

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

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

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

在这个例子中,反斜杠不会插入到行中。 当然,这是出于安全原因。 检查Hackipedia的页面查看一些可能的情况。

希望这是你所问的。

链接地址: http://www.djcxy.com/p/93657.html

上一篇: is this normal?

下一篇: PDO binding values for MySQL IN statement