php中的MySql查询仅在json中编码时返回最后的结果

时间:2015-05-26 13:38:20

标签: javascript php jquery mysql json

我在php中有一个查询(mysql),当编码为json时只返回查询的最后一个结果但是我确信查询返回了多个结果:

$counter=0;
$reply=array();
$result = mysqli_query($conn,$stringQuery);;
if ($result->num_rows > 0) {
    // output data of each row
    while($row = mysqli_fetch_assoc($result)) {
        $reply["json"]=$row;
        $counter++;
    }

    echo json_encode($reply);
} else {
    echo json_encode("0 results");
}
$conn->close();

当我在javascript中对结果进行字符串化时,它只返回表的最后一个条目,或单个结果:

$.ajax({
    type: 'POST',
    url: 'SearchQuery.php',
    data: {
        'json': cond
    },
    contentType: "application/x-www-form-urlencoded;charset=UTF-8",
    dataType: 'json',
    success: function(response) {
        alert(JSON.stringify(response["json"]));

    }
});

3 个答案:

答案 0 :(得分:3)

试试这个:

while ($row = mysqli_fetch_assoc($result)) {
    $reply[] = $row;
    // ^^^^^^^^^^^^^

    $counter++;
}
echo json_encode($reply);

答案 1 :(得分:1)

尝试使用fetch_array()

更改fetch_assoc()
while($row=$result->fetch_array()){
       $reply[] = $row;
       $counter++;
}
echo json_encode($reply);

或尝试:

while($row=$result->fetch_array()){
     $items.=<<<EOD
    {
"r": "{$row['yourfield']}",
},
EOD;
$counter++;
}

header('Content-type: application/json');
?>
{
    "response": [
        <?php echo $item;?>
    ]
}

答案 2 :(得分:1)

下面

$reply["json"]=$row; 

在此行中,while循环中的最后一个获取行会覆盖现有结果,因此它仅显示最后一行。

你可以尝试

$reply["json"][]=$row; 

所以在成功函数的ajax

alert(JSON.stringify(response["json"]));

您可以通过密钥名称“json”访问数据。