PDO查询在结果集中两次返回每个字段

Dub*_*bby 1 php mysql mariadb

我有一个我无法解决的最奇怪的问题。我有一个简单的MySQL查询,它两次将结果中的每个字段返回一次。第一个键名为字段名,第二个键为整数。

该表如下所示:

id int(11)
user_id int(11)
first_name varchar(255)
last_name varchar(255)
country_code varchar(3)
mobile varchar(255)
email varchar(255)
profile_img var_char(255)
timestamp timestamp
Run Code Online (Sandbox Code Playgroud)

我的代码如下所示:

$db = new PDO('mysql:host=localhost;dbname=proj', 'dev', '<password>');
$sql = "SELECT * FROM contact";
$stmt = $db->prepare($sql);
$stmt->execute();
$contacts = $stmt->fetchAll();
print_r($contacts));
Run Code Online (Sandbox Code Playgroud)

输出为:

Array
(  
[id] => 1  
[0] => 1  
[user_id] => 1  
[1] => 1  
[first_name] => joan  
[2] => joan  
[last_name] => smith  
[3] => smith  
[country_code] => AU  
[4] => AU  
[mobile] => 0400 222 333  
[5] => 0400 222 333  
[email] => joan@example.com  
[6] => joan@example.com  
[profile_img] =>   
[7] =>  
[timestamp] => 0000-00-00 00:00:00  
[8] => 0000-00-00 00:00:00  
)
Run Code Online (Sandbox Code Playgroud)

我在Debian 9.1 VM中使用MariaDB 15.1和PHP 7.0。

eli*_*ide 5

这是因为您没有设置的fetch_style参数$stmt->fetchAll();。默认情况下,PDO将结果作为具有数字键和关联键(例如,“ first_name”和2)的数组来获取。

文档

fetch_style

如中所述控制返回数组的内容PDOStatement::fetch()。默认为的值PDO::ATTR_DEFAULT_FETCH_MODE(默认为PDO::FETCH_BOTH

要仅获取关联索引,请传递参数PDO::FETCH_ASSOC,如

$contacts = $stmt->fetchAll(PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)

要仅获取编号索引,请传递参数PDO::FETCH_NUM,如

$contacts = $stmt->fetchAll(PDO::FETCH_NUM);
Run Code Online (Sandbox Code Playgroud)

完整的选项集在的文档中PDOStatement::fetch列出。