繁体   English   中英

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

[英]Why json_encode() return keys values twice (index key and string key)?

当我使用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"
   }
]

我怎么办没有索引键?

使用PDO :: FETCH_ASSOC获取模式:

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

它不是json_encode ,而是因为您的PDO实例的获取模式设置为PDO::FETCH_BOTH 请参阅PDOStatement::fetchAll的获取样式的文档。

用这个:

PDO :: FETCH_ASSOC :返回由结果集中返回的列名索引的数组

PDO :: FETCH_BOTH (默认值):返回由结果集中返回的列名和0索引列号索引的数组

PDO :: FETCH_BOUND :返回TRUE并将结果集中列的值分配给它们与PDOStatement :: bindColumn()方法绑定的PHP变量

PDO :: FETCH_CLASS :返回所请求类的新实例,将结果集的列映射到类中的命名属性。 如果fetch_style包含PDO :: FETCH_CLASSTYPE(例如PDO :: FETCH_CLASS | PDO :: FETCH_CLASSTYPE ),则类的名称由第一列的值确定。

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

PDO :: FETCH_LAZY :组合PDO :: FETCH_BOTHPDO :: FETCH_OBJ ,在访问它们时创建对象变量名

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

PDO :: FETCH_OBJ :返回一个匿名对象,其属性名对应于结果集中返回的列名

PDOStatement对象::取

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

你必须使用PDO :: FETCH__ASSOC作为参数

$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));

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM