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