我尝试在 PDO fetchAll()
中使用 PDO::FETCH_KEY_PAIR
参数来输出一个数组,其中每个键都是主键,并且该值是 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服务器5.6.16 - pdo_mysql mysqlnd 5.0.11-dev
最佳答案
尝试用这种方式获取结果:
$stmt = $this->db->prepare('SELECT country_id, name FROM _country');
$stmt->execute();
$data = array_map('key_value', $stmt->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC));
function key_value($value){
return $value[0]['name'];
}
PDO::FETCH_GROUP|PDO::FETCH_ASSOC
返回数组的数组。然后我将结果数组映射到一个函数并仅生成所需的输出,该输出应该在您的末尾:
数组 ([18] => 印度 [26] => 德国 [129] => 瑞典)
我实际上尝试使用 \PDO::FETCH_KEY_PAIR
参数生成结果,但效果很好。我不知道问题出在哪里!
关于php - 使用带有 FETCH_KEY_PAIR 的整数键时 PDO 零索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50783315/