转义$ _SESSION用户名以在mysql查询中使用的正确方法是什么?

时间:2013-05-03 17:20:11

标签: php mysql

我正在使用存储的$ _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并将其更改为'demo'(实际上是用户名),则查询会成功返回12,但使用$username变量不会工作。我没有正确地逃脱字符串吗?有一个更好的方法吗?顺便说一句,我也可以在SQL命令行中执行查询,它工作正常,所以我知道查询不是问题。

1 个答案:

答案 0 :(得分: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