pdo使用带有fetch\u key\u对的整数键时索引为零

5w9g7ksd  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(455)

我试着用 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\u id是int(10),name是varchar。这个 $data 然后在另一个脚本中处理:

foreach( $data as $key => $value ){
        echo $key . "|" . $value;
    }

选择语句结果:

------------------------
 |country_id | name     |
 ------------------------
 | 18        | India    |
 | 26        | Germany  |
 | 129       | Sweden   |
 ------------------------

但是,当返回数组时,键的索引为零,只使用name列作为值。
预期输出(使用 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 属性,但无济于事。
我正在运行:-php5.5.9-mysql server 5.6.16-pdo\u mysql mysqlnd 5.0.11-dev

vcudknz3

vcudknz31#

尝试以下方式获取结果:

$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` 返回数组的数组。然后我将生成的数组Map到一个函数,并只生成所需的输出,该输出应该在您的末尾: `Array ( [18] => India [26] => Germany [129] => Sweden)` 实际上我试着用 `\PDO::FETCH_KEY_PAIR` 但效果很好。我不知道是什么问题!

相关问题