Я пытаюсь пропустить мою базу данных и вывести все строки с совпадением с объединенной таблицей.
У меня есть следующие две таблицы:
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;
потому что выход запускает скрипт для остановки (даже внутри циклов), поэтому вы получите только первую строку.