JSON值编码两次:如何使用fetch_assoc()?

时间:2013-05-11 15:50:47

标签: php json pdo fetch

以下代码返回值两次,一次以JSON编码:

<?php
    $req = $bdd->prepare('SELECT Date, Open, Close FROM quotes WHERE Symbol = ? AND Date > ? AND Date < ?');
    $req->execute(array($_GET['id'], $_GET['datemin'], $_GET['datemax']));

    $test=array();
    while ($donnees = $req->fetch())
    {
        $test[] = $donnees;
    }

    echo json_encode($test);
?>
  

[{ “日期”: “2012-02-29”, “0”: “2012-02-29”, “打开”: “88.14”, “1”: “88.14”, “关闭”:” 87.60" , “2”: “87.60”},{ “日期”: “2012-02-28”, “0”: “2012-02-28”, “打开”: “87.83”, “1”:” 87.83" , “关闭”: “87.77”, “2”: “87.77”},{ “日期”: “2012-02-27”, “0”: “2012-02-27”, “打开”:” 87.41" , “1”: “87.41”, “关闭”: “88.07”, “2”: “88.07”}]

我在some post上阅读,我必须使用fetch_assoc()代替fetch_array()

但以下代码不返回任何内容:while ($donnees = $req->fetch_assoc())。这也不是:while ($donnees = $req->fetch_array()) 我没有弄到什么问题。

2 个答案:

答案 0 :(得分:2)

参见手册 http://www.php.net/manual/en/pdostatement.fetch.php

你应该尝试:

$req->fetch(PDO::FETCH_ASSOC)

答案 1 :(得分:1)

我不知道req是什么,但我的猜测是它是一个PDOStatement对象,只有fetchfetchAll方法(没有{{ 1}}或fetch_assoc)。

您可以使用fetch_array的第一个参数更改PDO的提取样式。默认为fetch(类似于PDO::FETCH_BOTH)。您可以将其设置为mysql_fetch_array,如果您愿意,可以设置为PDO::FETCH_ASSOC

mysql_fetch_assoc

如果它不是$req->fetch(PDO::FETCH_ASSOC); //global setting $bdd->setFetchMode(PDO::FETCH_ASSOC); ,那么无论它是什么,都没有PDOStatementfetch_assoc方法。您将不得不查找如何更改获取模式。