php - 使用带有 FETCH_KEY_PAIR 的整数键时 PDO 零索引

标签 php mysql pdo

我尝试在 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_FETCHESPDO::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/

相关文章:

php - 未找到类 'Doctrine\Common\Inflector\Inflector'

javascript - PHP 多维关联数组到 JS 对象使用 json_encode()

php - Django + XAMPP on Mac (2002, "Can' t 通过套接字 '/tmp/mysql.sock' (2)"连接到本地 MySQL 服务器")

php - PDOStatement::nextRowSet() 在 Windows 上的 MySQL 5.6.16 中被破坏

php - PDO 使用正确的值但将错误的值插入数据库

php - 如何使用 PHP PDO 运行 Transact-SQL

php - 如何从 MySQL 表中提取多个 HTML 标签

php - 使用 Zend Framework 从 DB 中获取 Integer 将值作为字符串返回

php - 需要通过 php 从文本文件中删除/清理垃圾字符

mysql - 一起使用 orderby 和 group by