PHP PDOStatement: fetch a row, as the first column as the key of an array

pdo, php

Solution

Credits go to devdRew. Check the other question here.

Apparently, you can as stated in the answer. I checked as well and it works great.

$q = $db->query("SELECT `name` AS name, `value` AS value FROM `settings`;");
$r  = $q->fetchAll(PDO::FETCH_KEY_PAIR);

EDIT

This answer requires that you specify maximum 2 columns: 1 key and 1 value. If you need to retrieve more keys from the database, check the answer below and read `@nullabilty`'s comment. For those who are lazy, here is his method:

$q->fetchAll(PDO::FETCH_UNIQUE);

Problem

I am using `PDOStatement` to query the database. Whenever I get a returned row, I want it to be fetched into an array, with the `$row[0]` as the key, and the subsequent elements in the row as the values. I can, of course, write a combination of `foreach` loops and `if` conditionals to do the job, such as the below: ``` 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; } ``` but I am looking for an existing method; is there such a method already exist? Why reopened the question. What is asked here is clearly the combination of PDO::FETCH_GROUP|PDO::FETCH_ASSOC. PDO::FETCH_KEY_PAIR only works with a 2 column result. But here the example is a 2 column result only to simplify the code in the question, not for all situations.

Original source

Related problems