2014-03-24 78 views
0

進出口使用PDO有一個非常基本的問題,關聯數組值我需要一些幫助 - 沒準我有一個語法錯誤的地方,但我不能爲我的生活中找到它(IM新PDO和還沒有使用關聯數組非常如此集中在這部分代碼)引用從PDO :: FETCH_ASSOC

我選擇從我與用戶使用下面的代碼有一定的電子郵件地址相關聯的數據庫中的所有數據:

$id = '[email protected]'; 


$stmt = $db->prepare('SELECT * FROM first_page WHERE email=?'); 
$stmt->bindValue(1, $id, PDO::PARAM_STR); 
$stmt->execute(); 
$resulty = $stmt->fetchAll(PDO::FETCH_ASSOC); 

print_r($resulty); 
echo $resulty['title']; 

print_r顯示關聯數組中的全部,但echo犯規顯示所存儲的值列'標題'。有在數據庫中名爲'title'的列,所以即時im假設我引用它不正確。然而,它看起來幾乎與我在我面前的一本書中的例子相同,因此我不知道從哪裏開始尋找!

的print_r的輸出是:

Array ([0] => Array ([user_id] => 93 [time_stamp] => 2014-03-04 22:00:16 [title] => Mr [first_name] => Pete [surname] => John [phone] => 2147483647 [email] => [email protected])) 
+0

發佈print_r($ resulty)的結果;或者至少有相關的一部分。 – larsAnders

+0

添加到問題! – Giovanni

+0

'echo $ resulty [0] ['title'];' –

回答

3

$stmt->fetchAll()返回關聯數組的數組,因爲它支持返回多於一行價值的數據。

即使你的結果集有一行,fetchAll()仍返回一個元素,這對於一個行關聯數組的數組。

因此,你需要:

echo $resulty[0]['title']; 
+0

將問題的編輯添加後,我推測它與數組中的數組有關!是否有替代使用fetchAll,所以我可以像我所做的那樣引用它? – Giovanni

+0

當然,你可以使用'while($ resulty = $ stmt-> fetch(PDO :: FETCH_ASSOC))...'來一次獲得一行。 –

+0

我只會檢索一行(電子郵件地址是唯一的),所以我認爲我只是使用上面的代碼,但刪除'while'? (即取代fetchAll與提取?) – Giovanni

1

爲了擴大這件事 - 即如果你有比單一的結果更多,你可以使用與陣列$ resulty foreach循環。這消除了使用$ resulty [0],$ resulty [1]等的需要。

foreach ($resulty as $result){ 
    echo $result['title']; 
} 
+0

我永遠不應該有多個結果(這是數據引用一個唯一的電子郵件地址的一個用戶,我試圖檢索這個用戶的數據,所以我可以預先填充表單),所以我可以使用一個替代fetchAll所以我不需要使用foreach循環? – Giovanni

+0

您可以使用抓取。一次返回一行。您也可以在查詢結尾處添加LIMIT 1。但我相信結果數組將具有相同的結構。您可能仍然需要使用[0]符號。 – larsAnders

相關問題