[英]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_BOTH和PDO :: FETCH_OBJ ,在访问它们时创建对象变量名
PDO :: FETCH_NUM :从第0列开始,返回由结果集中返回的列号索引的数组
PDO :: FETCH_OBJ :返回一个匿名对象,其属性名对应于结果集中返回的列名
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.