Php 为什么json_encode()会两次返回键值(索引键和字符串键)?
当我使用json_encode()函数时,该方法返回一个json,其值是相同的两倍:一个是字符串键,另一个是索引。我以前没有这个问题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
$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));