【问题标题】:PDO Fetch Array like MySQLi类似 MySQLi 的 PDO 获取数组
【发布时间】:2014-05-28 22:32:34
【问题描述】:

我知道如何获取 PDO 数组,但我如何像使用 MySQLi 的 fetch_array 一样从中收集数据?

例如,

MySQLi

$query = $mysqli->query("SELECT * FROM `foo` WHERE `ID`='1'");
$array = $query->fetch_array();

得到结果

echo $array['bar'];

您将如何使用 PDO 做到这一点?我知道你可以这样做:

PDO

$query = $pdo->prepare("SELECT * FROM `foo` WHERE `ID`='1'");
$query->execute();
$result = $query->fetchAll();

得到结果

echo $result['bar'];

返回的结果与 MySQLi 不同

我是不是做错了什么,有没有办法做到这一点?

【问题讨论】:

  • 读取 fetch_style 参数 php.net/manual/en/pdostatement.fetch.php PDO::FETCH_ASSOC 返回一个数组,该数组由结果集中返回的列名索引
  • 你必须明白,fetch_array() 遍历整个结果集并一次返回一行,fetchAll() 返回整个结果集。改为:$query->fetch(PDO::FETCH_ASSOC)
  • 感谢您的指导。
  • 我记得在我的 PHP 时代你可能会发现有用的事情是使用 print_r() 和/或 var_dump() 来预测 PHP 向你抛出的经常记录不充分的数据结构。
  • @tgies:这里没有什么记录不好。第一个评论者的链接指向正确的文档。

标签: php mysql arrays pdo mysqli


【解决方案1】:

fetchAll() fetch_array() 相同。

您希望 fetch() 获得 一个 行,而不是 fetchAll() 获得 ALL 行。

$result = $query->fetch(PDO::FETCH_ASSOC);

【讨论】:

  • 啊,我明白了。我是 PDO 的新手,因为我想同时抛弃 MySQL 和 MySQLi,正如您可能看到的那样。非常感谢。
  • +1 我要补充一点,您应该可以省略 PDO::FETCH_ASSOC,因为默认返回一个以关联和数字索引的数组。
  • PDO:: 之前的FETCH_* 绝对必要吗?为什么?我相信在 MySQLi 中你只需要在 FETCH_* 中解析
  • PDO 是类名,FETCH_* 是一个常量。
  • :: 表示静态访问。您使用->(例如$query->)。那就是对象上下文。可以在类中静态访问常量。
猜你喜欢
  • 2013-02-08
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 2019-11-05
  • 1970-01-01
相关资源
最近更新 更多