2013-10-30 22 views
-2

我想清理我的$ _GET輸入,但由於某種原因,mysql不檢索數據庫中的數據。如果我這樣做:

$user = mysqli_real_escape_string($connection, $_GET['id']); 

//execute query to call user info 
$query = "SELECT user 
FROM company 
WHERE user={$_GET['id']} "; 

這將工作和結果顯示;但是,如果我這樣做:

$user = mysqli_real_escape_string($connection, $_GET['id']); 

//execute query to call user info 
$query = "SELECT user 
FROM company 
WHERE user= '$user' "; 

我沒有收到數據庫錯誤,但沒有顯示出來。

我沒有消毒嗎?這裏發生了什麼?請幫助!

+1

什麼是你所得到的錯誤? –

+1

調試! 'var_dump'所有相關的值!閱讀錯誤信息!告訴我們兩個! – deceze

+0

在第二個查詢中,您在$ user周圍使用了一些額外的撇號(')。他們缺少{$ _GET ['id']}。 –

回答

0

避免這種情況最好的辦法就是使用準備好的查詢: How can I prevent SQL injection in PHP?

這是非常簡單而有效:

$q = $db->prepare('SELECT user FROM company WHERE user=?'); 
$q->bind_param('i', $user); 

$q->execute(); 

$result = $q->get_result(); 
while ($row = $result->fetch_assoc()) { 
    // do something with $row 
} 

這很酷,因爲它是面向對象和它的安全。有些鏈接:

+0

嗨規範,我感謝您的幫助。我是PHP新手,不熟悉準備好的語句,所以鏈接幫助很大。迭代示例時出現此錯誤:致命錯誤:在非對象上調用成員函數fetch_assoc() – user2675057

+0

連接到數據庫的位置使用:$ db = new mysqli('localhost','my_user', 'my_password','my_db');'。當然用你的用戶名,密碼和數據庫名填寫這些佔位符。我認爲你必須完全重建與DB的連接。查看「連接到數據庫」瞭解更多詳情。 – speccode