我PDOStatement用来查询数据库.每当我得到一个返回的行时,我希望将它$row[0]作为键提取到数组中,并将行中的后续元素作为值.
当然,我可以编写一个foreach循环和if条件组合来完成这项工作,如下所示:
private static function GetMySQLResult($dbname, $sqlString) {
        $dbh =  self::ConstructPDOObject($dbname);
         $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $result=array();
         foreach ($dbh->query($sqlString) as $row)
         {
            $result[$row[0]][]=$row[1];  // the simplest case for 2 columns, should add more to handle more columns
         }
         return $result;
}
但我正在寻找一种现有的方法; 有没有这样的方法已经存在?
Sav*_*ova 29
积分转到devdRew.在这里查看另一个问题.
显然,你可以在答案中说明.我检查过,效果很好.
$q = $db->query("SELECT `name` AS name, `value` AS value FROM `settings`;");
$r  = $q->fetchAll(PDO::FETCH_KEY_PAIR);
编辑
此答案要求您指定最多2列:1个键和1个值.如果您需要从数据库中检索更多密钥,请查看下面的答案并阅读@nullabilty评论.对于那些懒惰的人来说,这是他的方法:
$q->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_UNIQUE|PDO::FETCH_ASSOC);
Lou*_*uis 16
$stmt->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_UNIQUE); 
虽然有点黑客但实际上是唯一的方法,因为有人决定 FETCH_KEY_PAIR应该只需要2列结果集.
注意:第一列用于键,不以任何其他形式返回到结果集中.
一些提示,您需要将正确的获取样式传递给PDOStatement->fetch()方法,这样您就不会得到双数据(数字和文本列名称)。就像 $row[0] 和 $row['id'] 一样,当您使用 PDO::FETCH_BOTH 时,它们都包含相同的值。
$result = $dbh->query($sqlString);
while ($row = $result->fetch(PDO::FETCH_NUM)) {
...
至于你的问题,你必须获取所有结果,然后创建一个以 $row['id'] 作为键、结果行作为值的数组 - 就像你正在做的那样。我围绕 PDO 构建了整个 ORM 库,但我永远找不到任何东西可以自动执行此操作。
$result = $dbh->query($sqlString);
$results = array();
while ($row = $result->fetch(PDO::FETCH_NUM)) {
    $results[$row[0]] = $row;
}
return $results;
| 归档时间: | 
 | 
| 查看次数: | 12775 次 | 
| 最近记录: |