如果使用准备好的PHP/MySQL查询,我是否需要清理输入?

Gar*_*hby 9 php mysqli sanitization prepared-statement

鉴于以下代码,我是否需要逃避和消毒$city

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$city = "Amersfoort";

/* 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();
}

/* close connection */
$mysqli->close();
?>
Run Code Online (Sandbox Code Playgroud)

使用准备好的查询时,是否需要清理任何输入?

pro*_*php 13

不,你不必为了注射保护而逃避它或消毒它.对于其他应用程序特定的东西,你可能会消毒它.

我不久前有一个类似的问题:

mysqli_stmt_bind_param SQL注入


San*_*der 9

@Gary:您直接从php.net上的手册复制了代码片段,关于mysqli :: prepare.在同一页面上是以下文字:

"准备语句的目的是不在SQL语句中包含数据.将它们包含在SQL语句中是不安全的.始终使用预准备语句.它们使用起来更清晰(代码更易于阅读),并且不容易进行SQL注入."

哪个是你问题的答案;)

  • 树木挡住了木头.;) (5认同)