我想消除SQL注入,我使用mysqli真正转义字符串或者是清楚的mysqli? 例如
$nick=mysqli_real_escape_string($_POST['nick'])
我想消除SQL注入,我使用mysqli真正转义字符串或者是清楚的mysqli? 例如
$nick=mysqli_real_escape_string($_POST['nick'])
您应该使用准备好的语句 ,并通过字符串数据作为参数,但你不应该逃避它。
这个例子是从文档采取:
/* create a prepared statement */
if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
/* bind parameters for markers */
$stmt->bind_param("s", $city);
/* execute query */
$stmt->execute();
/* bind result variables */
$stmt->bind_result($district);
/* fetch value */
$stmt->fetch();
printf("%s is in district %s\n", $city, $district);
/* close statement */
$stmt->close();
}
请注意,例如不调用mysqli_real_escape_string
。 你只需要使用mysqli_real_escape_string
如果你在查询中直接嵌入的字符串,但我劝你从来没有做到这一点。 尽可能始终使用参数。
有关
是的,你可以使用mysqli_real_escape_string格式化字符串,如果你要实现自己的查询处理器,使用占位符或某种查询生成器的。
如果你打算在代码中使用裸API函数(这显然是错误的做法,但当地的乡亲非常普及) - 更好地去准备好的声明。
无论如何,你不能“消灭SQL注入”单独使用此功能。 mysql(i)_real_escape_string
功能不会阻止打针,不应该被用于任何保护。