Php 准备好的报表和;“真实转义字符串”;

Php 准备好的报表和;“真实转义字符串”;,php,Php,我在这个网站上读到,当使用预先准备好的语句时,我不需要使用真正的字符串。我不熟悉事先准备好的发言。 我创建了一个传递字符串的准备语句 $stmt = $conn->prepare("INSERT INTO `messages` (`topic`, `message`, `user`)VALUES(?, ?, ?)"); $stmt->bind_param("sss", $topic, $message, $user); 然后我将这个字符串输入任何字段:{/n\n

我在这个网站上读到,当使用预先准备好的语句时,我不需要使用真正的字符串。我不熟悉事先准备好的发言。 我创建了一个传递字符串的准备语句

 $stmt = $conn->prepare("INSERT INTO `messages` (`topic`, `message`,         `user`)VALUES(?, ?, ?)");
 $stmt->bind_param("sss", $topic, $message, $user);
然后我将这个字符串输入任何字段:
{/n\n/r\r“我在做饭”}
(括号内的内容) 这正是数据库中显示的内容。 然而,如果我添加一个真正的“转义”字符串,我会得到
{/n\\n/r\\r\“我在做饭”\'}


所以我很困惑,真正的escape字符串肯定在改变输入,我需要它吗,还是
/n/r
很好

在使用准备好的语句时,不需要
real\u escape\u string
。事实上,不需要转义输入数据

无法从准备好的语句值中转义


当您说
real\u escape\u string
正在更改值时,您是正确的。这是因为如果没有使用准备好的语句,则需要转义数据。因此,
real\u escape\u string
执行所需的转义并提供您看到的输出(
\\n
等)。如前所述,准备好的语句不需要这个过程。

嗯,是的,
real\u escape\u string
正在更改值,这就是它的工作。它以一种方式更改值,使其在置于引号中时成为有效的SQL字符串文本

然而,准备好的语句避免了“引号中的字符串文字”的整个问题,您根本不必担心它。准备好的语句将接受任何字符串,并确保它按原样插入数据库,而不会因为作为字符串文本进行计算而导致格式错误或产生语法问题。这正是您所看到的:您的值完全按照您提供的方式插入到数据库中,这正是您想要的


使用带值绑定的准备语句时,不需要
real\u escape\u string


阅读以下内容:。

那是因为你被告知的是事实。