我正在使用此方法将数据存储在数据库中:
$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()
的调用,这对我的阅读安全很重要。
答案 0 :(得分:7)
mysqli_real_escape_string
,因为您使用的是bind_param
。它是一个或另一个,你不需要两者。由于各种原因,绑定参数更好,主要是它更容易构建SQL,数据库也可以更高效(因为即使绑定值不同,它也可以更有效地执行相同的查询两次)。
为了输出值,在HTML中你应该使用Alamri提到的htmlspecialchars
之类的东西。大多数体面的模板引擎都允许你默认转义值,这样你就不必每次都记得逃避。例如,Symfony将在其模板中默认转义值(其他PHP Web框架可用)。