Php mysqli\u real\u escape\u字符串,我应该使用它吗?

Php mysqli\u real\u escape\u字符串,我应该使用它吗?,php,mysqli,Php,Mysqli,我想消除sql注入,我应该使用mysqli\u real\u escape\u string()还是在mysqli中很清楚? 比如说 $nick = mysqli_real_escape_string($_POST['nick']) 您应该使用并传递字符串数据作为参数,但不应转义它 此示例摘自文档: /* create a prepared statement */ if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE

我想消除sql注入,我应该使用
mysqli\u real\u escape\u string()
还是在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\u real\u escape\u string
。如果直接在查询中嵌入字符串,则只需使用
mysqli\u real\u escape\u string
,但我建议您千万不要这样做。尽可能使用参数

相关的


是的,如果要实现自己的查询处理器,可以使用占位符或某种查询生成器,使用mysqli\u real\u escape\u string格式化字符串

如果您计划在代码中使用裸API函数(这显然是错误的做法,但当地人非常流行)——最好使用准备好的语句


无论如何,您不能仅使用此函数“消除sql注入”<代码>mysql(i)\u real\u escape\u string函数不会阻止注入,也不应该用于任何保护。

我不完全理解准备好的语句,但感谢您明天要做的第一件事是在打开礼物之前理解准备好的语句。是的,我必须..但是如果我在每种情况下都使用它,用户输入的代码会很长,而仅仅使用mysqli_real_escape_string就很长了simplier@dontHaveName:但是如果不使用参数,退出SQL注入的风险要高得多。您只需在一个查询中犯一个错误,您的整个数据库就可能遭到破坏。如果你愿意冒这个风险来避免几次击键,我想这是你的选择。非常感谢。现在我明白了:)。顺便问一下,有没有其他“黑客”会危及我的网络?