2013-05-03 66 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

相關問題