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

时间:2019-05-09 04:56:58

标签: 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

我的代码如下:

$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));

输出为:

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  
)

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

1 个答案:

答案 0 :(得分:5)

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

来自docs

  

fetch_style

     

控制$stmt->fetchAll();中记录的返回数组的内容。默认值为PDOStatement::fetch()(默认为PDO::ATTR_DEFAULT_FETCH_MODE

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

PDO::FETCH_ASSOC

要仅获取编号索引,请传递参数$contacts = $stmt->fetchAll(PDO::FETCH_ASSOC); ,如

PDO::FETCH_NUM

全套选项列在the documentation for PDOStatement::fetch中。