我有一个我无法解决的最奇怪的问题。我有一个简单的 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 回答
慕妹3146593
TA贡献1820条经验 获得超9个赞
这是因为你没有设置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);
要仅获取编号索引,请传递参数PDO::FETCH_NUM
,如
$contacts = $stmt->fetchAll(PDO::FETCH_NUM);
的文档中PDOStatement::fetch
列出了完整的选项集。
- 1 回答
- 0 关注
- 152 浏览
添加回答
举报
0/150
提交
取消