回显所有json_encode行

时间:2014-05-16 00:30:39

标签: php mysql sql arrays json

我正在尝试循环访问我的数据库并输出与连接表匹配的所有行。

我有以下两个表:

quest_items 存储与项目相关的所有数据:

enter image description here

join_questitems 存储玩家ID与玩家所拥有物品之间的关联:

enter image description here

JS:传递所有必要信息以查询表格...

$.getJSON("phpscripts.php", {
    "_player" : Player,
    "_playerID" : UserID
},
function(returned_data) {
    var item_name = returned_data.item_name;
    item_image = returned_data.item_image;

    $(".questItems").html(item_name + ", " + item_image);       
   }
);  

PHP:

$statsArray = array();
$qry = 
    'SELECT qi.* 
    FROM quest_items qi
    LEFT JOIN join_questitems jqi ON (qi.item_id = jqi.item_id)
    WHERE jqi.user_id = "' . $playerID . '"';

$result = $mysqli->query($qry) or die(mysqli_error($mysqli));

while ($row = $result->fetch_assoc()) {
    $myrow = json_encode($row);
    array_push($statsArray, $myrow);
}   
$k = 0;
while ($k < count($statsArray)) {
    echo $statsArray[$k];
    $k++;
}

但是,如果我只做一行,我得到输出,但只有一行。我需要两行:

while ($row = $result->fetch_assoc()) {
    echo json_encode($row);
    exit;
}   

$(".questItems").html(item_name + ", " + item_image)提供:rice, test/path.png

为什么我不能遍历充满json_encoded行的PHP数组并输出它们?我是否必须将item_nameitem_image设置为数组并循环遍历数组?


编辑:

  • $(".questItems").append(item_name + ", " + item_image)不起作用

  • 调试器的网络输出显示正在输出行,但在第一行中,我的UTF-8字符fàn在客户端输出中出现乱码(如您所见)。这很奇怪,因为在phpscripts.php文件的顶部,我放了mysqli_set_charset($mysqli, "utf8");

enter image description here

2 个答案:

答案 0 :(得分:1)

您不应该分别对每一行进行编码。将所有结果放入数组中,然后在完成后调用该数组上的json_encode

while ($row = $result->fetch_assoc()) {
    $statsArray[] = $row;
}
echo json_encode($statsArray);

然后在Javascript中你需要遍历返回的数组:

$.getJSON("phpscripts.php", {
    "_player" : Player,
    "_playerID" : UserID
},
    function(returned_data) {
        $.each(returned_data, function(i, e) {
            var item_name = e.item_name;
            var item_image = e.item_image;

            $(".questItems").append(item_name + ", " + item_image + "<br/>");       
        });
    };  
);

答案 1 :(得分:1)

而不是:

while ($row = $result->fetch_assoc()) {
    echo json_encode($row); 
    exit; //<--- this code breaks the while loop;
}  

有这个:

$quest_items = array();
while ($row = $result->fetch_assoc()) {
    $quest_items[] = $row;
}  

echo json_encode($quest_items);
exit;

因为exit会触发脚本停止(甚至在循环内部),所以你只能获得第一行。