PHP PDO语句:获取一行,作为数组的第一列的键

2022-08-30 16:01:11

我正在使用查询数据库。每当我得到一个返回的行时,我希望它被提取到一个数组中,以 键,行中的后续元素作为值。PDOStatement$row[0]

当然,我可以编写循环和条件的组合来完成这项工作,如下所示:foreachif

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) {
        // the simplest case for 2 columns, 
        // should add more to handle more columns
        $result[$row[0]][]=$row[1];
    }
    
    return $result;   
}

但我正在寻找一种现有的方法;有没有这样的方法已经存在

为什么重新打开这个问题。

这里问的显然是PDO::FETCH_GROUP|PDO::FETCH_ASSOC. PDO::FETCH_KEY_PAIR 仅适用于 2 列结果。但这里的例子是一个2列的结果,只是为了简化问题中的代码,而不是所有情况。


答案 1

积分归 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_UNIQUE);

答案 2
$stmt->fetchAll(PDO::FETCH_UNIQUE); 

虽然有点黑客,但确实是做到这一点的唯一方法,因为有人决定FETCH_KEY_PAIR应该只需要2列结果集。

注意:第一列用作键,不会以任何其他形式在结果集中返回。


推荐