0

我正在使用存储的 $_SESSION 用户名:

$usernameunesc = htmlentities($_SESSION['username'], ENT_QUOTES, 'UTF-8');

并转义变量如下:

$username = mysqli_real_escape_string($link, $usernameunesc);

然后使用它执行以下查询:

$query = mysqli_query($link, "SELECT id FROM users WHERE username = '".$username."'");

最后一个查询返回一个输出

1111

如果我$username从查询中删除并将其更改为“演示”(实际上是用户名),则查询成功返回 12 的 id,但使用该$username变量不起作用。我没有正确地转义字符串吗?有一个更好的方法吗?顺便说一句,我也可以在 SQL 命令行中执行查询,它工作正常,所以我知道查询不是问题。

4

1 回答 1

1

当您使用 mysqli 时,我建议您使用准备好的语句 - 它会自动转义变量。

if ($stmt = $mysqli->prepare("SELECT id FROM users WHERE username =?")) {

    /* bind parameters for markers */
    $stmt->bind_param("s", $usernameunesc);

    /* execute query */
    $stmt->execute();
}

完整示例在这里http://php.net/manual/en/mysqli.prepare.php

于 2013-05-03T17:25:42.690 回答