2014-03-24 75 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

相关问题