0
$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"}]
4

3 回答 3

3

是因为您使用 PDO 获取数据的方式。PDOStatement::fetch使您可以选择是否需要关联数组、索引数组等。默认是两者都有。将其更改为具有您期望的行为:

while($obj = $result->fetch(PDO::FETCH_ASSOC))

于 2012-07-18T09:12:14.767 回答
1

从数据库返回的 $encodable 包含所有值的索引(数字)和键(列名)。因此,它为键提供一次,为索引提供一次。

您可以迭代结果并将所需的值推送到数组中。然后对其进行编码。

于 2012-07-18T09:09:34.690 回答
0

尝试更改此行

while($obj = $result->fetch())

while($obj = $result->fetch(PDO::FETCH_ASSOC))

来自 fetch() 常量的 php 文档
控制如何将下一行返回给调用者。此值必须是 PDO::FETCH_* 常量之一,默认为 PDO::FETCH_BOTH。


PDO::FETCH_ASSOC:返回一个按列名索引的数组,如结果集中返回的那样

于 2012-07-18T09:09:54.617 回答