【问题标题】:Referencing to an associative array value from PDO::FETCH_ASSOC从 PDO::FETCH_ASSOC 引用关联数组值
【发布时间】:2014-03-24 21:02:25
【问题描述】:

我在使用 PDO 时遇到了一个非常基本的问题,我需要一些帮助 - 很可能我在某处有语法错误,但我一辈子都找不到它(我是 PDO 的新手,并且没有非常使用关联数组,所以专注于这部分代码!)

我正在使用以下代码从我的数据库中选择与具有特定电子邮件地址的用户关联的所有数据:

$id = 'email@address.com';


$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”的列,所以我假设我错误地引用了它。但是,它看起来与我面前一本书中的示例几乎相同,所以我不知道从哪里开始寻找!

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@address.com))

【问题讨论】:

  • 发布 print_r($resulty); 的结果或者至少是其中的一部分。
  • 添加到问题中!!
  • echo $resulty[0]['title'];

标签: php mysql pdo


【解决方案1】:

$stmt->fetchAll() 返回一个关联数组的数组,因为它支持返回多于一行的数据。

即使您的结果集只有一行,fetchAll() 仍会返回一个包含一个元素的数组,即这一行的关联数组。

所以你需要:

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

【讨论】:

  • 在将编辑添加到问题后,我认为这与数组中的数组有关!有没有使用 fetchAll 的替代方法,以便我可以像以前那样引用它?
  • 当然,您可以使用while ($resulty = $stmt->fetch(PDO::FETCH_ASSOC)) ... 一次获取一行。
  • 我只会检索一行(电子邮件地址是唯一的),所以我假设我只是使用上面的代码但删除了“while”? (即用 fetch 替换 fetchAll?)
  • 我认为我不需要问这个问题——一旦我读回来,很明显这是正确的做法!! :)
【解决方案2】:

为了扩大规模 - 即如果您有多个结果,您可以使用带有数组 $resulty 的 foreach 循环。这消除了使用 $resulty[0]、$resulty[1] 等的需要。

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

【讨论】:

  • 我不应该有多个结果(它是指具有唯一电子邮件地址的一个用户的数据,我试图检索该用户的数据,以便我可以预先填充表单)那么我可以使用 fetchAll 的替代方法,这样我就不需要使用 foreach 循环了吗?
  • 你可以只使用 fetch。一次返回一行。您还可以在查询末尾添加 LIMIT 1。但我相信生成的数组将具有相同的结构。您可能仍需使用 [0] 表示法。
猜你喜欢
  • 2012-11-20
  • 2018-03-04
  • 2013-03-08
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 2018-04-16
  • 2012-11-10
  • 1970-01-01
相关资源
最近更新 更多