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.
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);