Я пытаюсь использовать параметр PDO::FETCH_KEY_PAIR
в PDO fetchAll()
, чтобы иметь возможность выводить массив, где каждый ключ является первичным ключом, а значение - это другое поле каждой строки, возвращаемое оператором SELECT.
Так, например:
$stmt = $this->db->prepare('SELECT country_id, name FROM _country');
$stmt->execute();
$data = $stmt->fetchAll(\PDO::FETCH_KEY_PAIR);
, где country_id - INT (10), а name - VARCHAR.Затем $data
обрабатывается в другом сценарии:
foreach( $data as $key => $value ){
echo $key . "|" . $value;
}
Результат оператора SELECT:
------------------------
|country_id | name |
------------------------
| 18 | India |
| 26 | Germany |
| 129 | Sweden |
------------------------
Однако, когда возвращается массив, ключи индексируются нулем, только с использованиемимя столбца в качестве значения.
Ожидаемый вывод (с использованием echo print_r($data)
)
Array ( [18] => India [26] => Germany [129] => Sweden)
Фактический вывод
Array ( [0] => India [1] => Germany [2] => Sweden)
Любопытно, когда я переключаю столбцы:
SELECT name, country_id FROM _country;
он отлично работает, возвращая каждое название страны в качестве ключа с целым числом первичного ключа в качестве значения.
Array ( [India] => 18 [Germany] => 26 [Sweden] => 129)
Я думал, что попробую поиграться с атрибутами PDO::ATTR_STRINGIFY_FETCHES
и PDO::ATTR_EMULATE_PREPARES
, но безрезультатно.
Я бегу: - php 5.5.9 -mysql server 5.6.16 - pdo_mysql mysqlnd 5.0.11-dev