如何停止json_encode()编码两次?

时间:2012-07-18 09:06:24

标签: php pdo json

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

3 个答案:

答案 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。

<小时/> PDO :: FETCH_ASSOC:返回按结果集中返回的列名索引的数组