2014-06-26 59 views
0

我試圖綁定一個參數,所以我可以根據WHERE子句查詢數據庫,該子句檢查存儲在SESSION中的用戶用戶名。用戶名肯定是存儲在會話中,因爲我可以看到它當我var_dump($_SESSION)所以我知道這是問題的原因。PDO參數綁定導致異常

而不是獲取返回的ID,我得到異常。例如,當我更改:user'Maverick'(顯然是來自數據庫的有效用戶名),它將返回該ID。有任何想法嗎?

$username = $_SESSION['username']; 

try { 
    $result = $db->query("SELECT id FROM user_info WHERE username = :user"); 
    $result->bindParam(':user', $username); 
    $result->execute(); 
    $user_info = $result->fetchAll(PDO::FETCH_ASSOC); 
} 

catch (Exception $e) { 
    echo "Could not retrieve user's ID"; 
    exit; 
} 

不知道它是如何相關的,但是當我實際上做替換:用戶與小牛,然後就echo $user_info它不返回任何東西,但是當我做var_dump($user_info);它顯示了以下內容: array(1) { [0]=> array(1) { ["id"]=> string(2) "59" } }

我想我的問題在技術上是一個由兩部分組成的問題。非常感謝。

+0

在你的catch塊,把'echo $ e-> getMessage();'看看錯誤是什麼。 –

+1

謝謝,這真的很有用!爲了測試getMessage,我改變了準備,它告訴我錯誤是如你所期望的那樣。優秀的一點套件。 –

回答

2

你需要改變你的查詢,以反映每個文檔的PDO綁定PARAM結構在這裏
http://www.php.net//manual/en/pdostatement.bindparam.php

$username = $_SESSION['username']; 

try { 
    $result = $db->prepare("SELECT id FROM user_info WHERE username = :user"); 
    $result->bindParam(':user', $username); 
    $result->execute(); 
    $user_info = $result->execute(); 
} 

catch (Exception $e) { 
    echo "Could not retrieve user's ID"; 
    exit; 
} 
2

我想你想prepare()而不是query()

$result = $db->prepare("SELECT id FROM user_info WHERE username = :user"); 
$result->bindParam(':user', $username); 
$result->execute();