我有一个我无法解决的最奇怪的问题。我有一个简单的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
Run Code Online (Sandbox Code Playgroud)
我的代码如下所示:
$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));
Run Code Online (Sandbox Code Playgroud)
输出为:
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
)
Run Code Online (Sandbox Code Playgroud)
我在Debian 9.1 VM中使用MariaDB 15.1和PHP 7.0。
这是因为您没有设置的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);
Run Code Online (Sandbox Code Playgroud)
要仅获取编号索引,请传递参数PDO::FETCH_NUM,如
$contacts = $stmt->fetchAll(PDO::FETCH_NUM);
Run Code Online (Sandbox Code Playgroud)
完整的选项集在的文档中PDOStatement::fetch列出。
| 归档时间: |
|
| 查看次数: |
24 次 |
| 最近记录: |