Повторить все строки json_encoded

Я пытаюсь пропустить мою базу данных и вывести все строки с совпадением с объединенной таблицей.

У меня есть следующие две таблицы:

quest_items хранит все данные, относящиеся к элементу:

введите описание изображения здесь

join_questitems сохраняет связь между идентификатором игрока и элементами, которые имеет игрок:

введите описание изображения здесь

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

Почему я не могу перебирать массив PHP, полный строк json_encoded, и выводить их? Должен ли я устанавливать item_name и item_image как массивы и циклически перебирать массивы?


РЕДАКТИРОВАТЬ:

  • $(".questItems").append(item_name + ", " + item_image) не работает ни

  • сетевой вывод из отладчика показывает, что строки выводятся, но в первой строке мой символ UTF-8, fàn , fàn на выходе клиента (как вы можете видеть). Это любопытно, как в верхней части моего файла phpscripts.php , я помещал mysqli_set_charset($mysqli, "utf8");

введите описание изображения здесь

Вы не должны кодировать каждую строку отдельно. Поместите все результаты в массив, а затем вызовите 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/>"); }); }; ); 

а не это:

 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; 

потому что выход запускает скрипт для остановки (даже внутри циклов), поэтому вы получите только первую строку.