0

我正在使用这种方法将数据存储在数据库中:

$content = $_POST['content'];
$content = mysqli_real_escape_string($mysqli,$content);

$stmt = $mysqli->prepare("INSERT INTO na_posts(postuid,content) VALUES (?, ?)");
$stmt->bind_param("ss",$post_id,$content);
$stmt->execute();
$stmt->close();

我使用这段代码从数据库中获取数据:

$sql = "SELECT * FROM na_posts WHERE postuid = '" . $id . "'";
$stmt = $mysqli->query($sql);
$row = $stmt->fetch_Object();
echo nl2br($row->content);

但输出是这样的:

嘿,这是第一行 \r\n 这是第二行

为什么新行会这样出现\r\n

如果我删除了对mysqli_real_escape_string()我已阅读的安全性很重要的调用,它会起作用。

4

1 回答 1

7

mysqli_real_escape_string如果您使用绑定参数,则不需要,因为您在这里使用bind_param. 这是其中之一,你不需要两者。由于各种原因,绑定参数更好,主要是更容易构建 SQL 并且数据库也可以更高效(因为即使绑定值不同,执行相同查询两次也会更有效)。

为了输出值,在 HTML 中你应该使用htmlspecialcharsAlamri 提到的类似的东西。大多数体面的模板引擎默认允许您转义值,这样您就不必每次都记住转义。例如Symfony将默认在其模板中转义值(其他 PHP Web 框架可用)。

于 2013-06-11T13:48:16.140 回答