mysqli真正的转义字符串,我应该用吗?

don*_*ame 13 mysqli

我想消除sql注入,我应该使用mysqli真正的转义字符串还是在mysqli中清楚?例如

$nick=mysqli_real_escape_string($_POST['nick'])
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 23

您应该使用预准备语句并将字符串数据作为参数传递,但您不应该将其转义.

此示例取自文档:

/* 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();
}
Run Code Online (Sandbox Code Playgroud)

需要注意的是例子并没有打电话 mysqli_real_escape_string.您只需要mysqli_real_escape_string在查询中直接嵌入字符串时使用,但我建议您永远不要这样做.始终尽可能使用参数.

有关

  • 我绝对不懂准备好的陈述,但谢谢 (3认同)
  • 明天你应该做的第一件事就是在准备陈述之前理解准备好的陈述. (3认同)