当我使用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"
}
]
我怎么办没有索引键?
答案 0 :(得分:8)
使用PDO :: FETCH_ASSOC获取模式:
return json_encode($req->fetchAll(PDO::FETCH_ASSOC));
答案 1 :(得分:4)
不是json_encode
,而是因为您的PDO实例的获取模式设置为PDO::FETCH_BOTH
。请参阅PDOStatement::fetchAll
's fetch style的文档。
答案 2 :(得分:2)
使用它:
PDO :: FETCH_ASSOC :返回按列索引的数组 在结果集中返回的名称PDO :: FETCH_BOTH (默认值):返回索引的数组 在您的帐户中返回的列名和0索引列号 结果集
PDO :: FETCH_BOUND :返回
TRUE
并指定
结果集中的列值为PHP变量
它们与PDOStatement :: bindColumn()绑定
方法
PDO :: FETCH_CLASS :返回一个新的实例 请求的类,将结果集的列映射到named 班上的属性。如果 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));
答案 3 :(得分:0)
你必须使用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));
}