当我调用$mysqli->real_escape_string($str)时,我会得到一个可以在查询中使用的安全字符串。它具有所有可以导致SQL注入攻击逃逸的特殊符号。
我的问题是-在以后的查询中使用它的正确方式是什么?我是用单引号还是双引号引用这个安全字符串?
例如,
$safe_title = $mysqli->real_escape_string($_POST['safe_title']);现在我要这样做:
$r = $mysqli->query("SELECT * FROM articles WHERE title='$safe_title'");或者这样:
$r = $mysqli->query('SELECT * FROM articles WHERE title="'.$safe_title.'"');有时我做一个,有时做另一个,但这一次,当我做了其中一个,并在输入中输入了一堆垃圾,不知何故,我得到了一个SQL查询错误。我意识到我做错了,我所有的代码都可能是易受攻击的。这就是我在这里问这个问题的原因。
发布于 2015-11-16 11:23:56
你会这样做:$r = $mysqli->query("SELECT * FROM articles WHERE title='$safe_title'");
但正如@JordiKroon指出的那样,准备好的语句是首选的。
$stmt = $mysqli->prepare("SELECT * FROM articles WHERE title=?");
$stmt->bind_param("s", $safe_title);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_array(MYSQLI_NUM))
{
foreach ($row as $r)
{
print "$r ";
}
print "\n";
}https://stackoverflow.com/questions/33725705
复制相似问题