为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕妹3242003 2021-06-10 17:27:15
我有一个我无法解决的最奇怪的问题。我有一个简单的 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列出了完整的选项集。


查看完整回答
反对 回复 2021-06-12
  • 1 回答
  • 0 关注
  • 152 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信