2013-05-03 69 views
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并将其更改为'demo'(这就是用户名的实际内容),查询将成功返回12的id,但使用$username变量不起作用。我没有正确逃脱弦?有一个更好的方法吗?顺便说一句,我也可以在SQL命令行中执行查询,并且它工作正常,所以我知道查询不是问题。

+0

是的,有,请阅读这篇文章:http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php – 2013-05-03 17:21:10

+0

我认为你的报价是错误的。试着让你的查询'“SELECT id FROM users WHERE username ='$ username'”' – ntgCleaner 2013-05-03 17:22:56

回答

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

相关问题