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には、すべての値のインデックス(数値)とキー(列名)の両方が含まれています。つまり、キーに1回、インデックスに1回与えています。

結果を繰り返し処理して、目的の値を配列にプッシュできます。次に、それをエンコードします。

于 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 に答える