$file_db = new PDO('sqlite:test.db');
if($file_db){
$result = $file_db->query('SELECT id FROM sample');
$encodable = array();
while($obj = $result->fetch())
{
$encodable[] = $obj;
}
$encoded = json_encode($encodable);
echo $encoded;
}else{
die("unable to conenct to db");
}
我只想输出{"id":"1"}
,但它也会给我"0":"1"
。有谁知道为什么?
结果:
[{"id":"1","0":"1"},{"id":"2","0":"2"},{"id":"3","0":"3"},{"id":"4","0":"4"},{"id":"5","0":"5"},{"id":"6","0":"6"},{"id":"7","0":"7"},{"id":"8","0":"8"},{"id":"9","0":"9"},{"id":"10","0":"10"},{"id":"11","0":"11"},{"id":"12","0":"12"},{"id":"13","0":"13"},{"id":"14","0":"14"}]
答案 0 :(得分:3)
是因为您使用PDO获取数据的方式。 PDOStatement::fetch
使您可以选择是否需要关联数组,索引数组等。默认是两者都有。将其更改为具有您期望的行为:
while($obj = $result->fetch(PDO::FETCH_ASSOC))
答案 1 :(得分:1)
$ encodable包含所有值的索引(数字)和键(列名)。所以它给了一次关键,一次给索引。
您可以迭代结果并将所需的值推送到数组中。然后对其进行编码。
答案 2 :(得分:0)
尝试更改此行
while($obj = $result->fetch())
到
while($obj = $result->fetch(PDO::FETCH_ASSOC))
来自php文档的fetch()常量
控制下一行将如何返回给调用者。该值必须是PDO :: FETCH_ *常量之一,默认为PDO :: FETCH_BOTH。 的