Php 为什么json_encode()会两次返回键值(索引键和字符串键)?

Php 为什么json_encode()会两次返回键值(索引键和字符串键)?,php,indexing,key,json,Php,Indexing,Key,Json,当我使用json_encode()函数时,该方法返回一个json,其值是相同的两倍:一个是字符串键,另一个是索引。我以前没有这个问题 $req = $bdd->prepare("SELECT mail,description FROM identifiant WHERE mail = :mail AND pass=:pass"); if ($req->execute(array( 'mail' => $_COOKIE['m

当我使用json_encode()函数时,该方法返回一个json,其值是相同的两倍:一个是字符串键,另一个是索引。我以前没有这个问题

$req = $bdd->prepare("SELECT mail,description FROM identifiant WHERE mail = :mail AND pass=:pass");
        if ($req->execute(array(
                    'mail' => $_COOKIE['mail'],
                    'pass' => $_COOKIE['pass']))) {
            header('Content-type: application/json');

            return json_encode($req->fetchAll());
答复如下:

[
   {
      "mail": "root@root.com",
      "0": "root@root.com",
      "description": "a description",
      "1": "a description"
   }
]

没有索引键怎么办?

这不是
json\u encode
,因为您的PDO实例的获取模式设置为
PDO::fetch\u BOTH
。请参阅文档。

使用PDO::FETCH_ASSOC获取模式:

return json_encode($req->fetchAll(PDO::FETCH_ASSOC));

您必须使用PDO::FETCH_uuassoc作为参数

$req = $bdd->prepare("SELECT mail,description FROM identifiant WHERE mail = :mail AND pass=:pass");
        if ($req->execute(array(
                    'mail' => $_COOKIE['mail'],
                    'pass' => $_COOKIE['pass']))) {
            header('Content-type: application/json');

  return  json_encode($req->fetchAll(PDO::FETCH_ASSOC));
}

使用以下方法:

FETCH_ASSOC:返回按列索引的数组 结果集中返回的名称

PDO::FETCH_BOTH(默认):返回索引为 在中返回的列名和0索引的列号 结果集

PDO::FETCH_-BOUND:返回
TRUE
并分配 将结果集中的列的值设置为 它们与PDOStatement::bindColumn()绑定 方法

FETCH_类:返回 请求的类,将结果集的列映射到命名 类中的属性。如果你喜欢你的风格 包括PDO::FETCH_类类型(例如PDO::FETCH_类| 然后类的名称是 根据第一列的值确定。

PDO::FETCH_INTO:更新现有实例 将结果集的列映射到 类中的命名属性

PDO::FETCH_LAZY:combines PDO::FETCH_和PDO::FETCH_OBJ, 在访问对象变量时创建它们的名称

FETCH_NUM:返回按列索引的数组 结果集中返回的编号,从第0列开始

PDO::FETCH_OBJ:返回带有 属性名,该属性名对应于在 结果集


他没有意识到SQL查询返回的是关联数组+普通索引值。对此问题进行否决投票是相当困难的。试试这个:返回json_encode($req->fetchAll(PDO::FETCH_ASSOC));
return json_encode($req->fetchAll(PDO::FETCH_ASSOC));