猿问

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

我有一个我无法解决的最奇怪的问题。我有一个简单的 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。


慕妹3242003
浏览 153回答 1
1回答

慕妹3146593

这是因为你没有设置fetch_style的参数$stmt->fetchAll();。默认情况下,PDO 将结果作为具有编号和关联键(例如,“first_name”和 2)的数组获取。从文档:fetch_style控制返回数组的内容,如 中所述PDOStatement::fetch()。默认为值PDO::ATTR_DEFAULT_FETCH_MODE(默认为PDO::FETCH_BOTH)要仅获取关联索引,请传递参数PDO::FETCH_ASSOC,如$contacts&nbsp;=&nbsp;$stmt->fetchAll(PDO::FETCH_ASSOC);要仅获取编号索引,请传递参数PDO::FETCH_NUM,如$contacts&nbsp;=&nbsp;$stmt->fetchAll(PDO::FETCH_NUM);的文档中PDOStatement::fetch列出了完整的选项集。
随时随地看视频慕课网APP
我要回答