PHP MySQL, пока цикл ничего не возвращает - PullRequest
1 голос
/ 14 декабря 2010

Я довольно новичок в php и mysql, так что, надеюсь, кто-то с большим опытом сможет дать мне некоторое руководство здесь.

У меня есть следующий код:

<?php

$npcname = $_GET['npcname'];
$npcinfo="SELECT * from npcs where name='$npcname'";
$npcinfo2=mysql_query($npcinfo) or die("could not get npc!");
$npcinfo3=mysql_fetch_array($npcinfo2);

$listquests = "SELECT * from quests where npcid = '$npcinfo3[npcid]'";
$listquests2 = mysql_query($listquests) or die("No Quests to list");
$listquests3=mysql_fetch_array($listquests2);

echo "<b>Quests Available for ".$npcname."</b><br>";

while($row=mysql_fetch_array($listquests2)) {

echo $row['name'];


}
?>

Для этого у меня есть несколько таблиц, которые выглядят так:

npcs
name|location|npcid

quests
name|qid|npcid

Таким образом, квест связан с NPC через поле npcid.

У меня есть одна запись в каждой таблице.

Bob|Scrapyard|1
AND
Sort Scrap Metal|1|1

Как видите, квест и Боб имеют общий npcid, равный 1.

В своем цикле я пытаюсь перечислить все квесты для Боба. Однако при выполнении кода я не получаю никаких квестов в списке.

Если я поставлю код:

  $listquests3['name'];

За пределами моей петли успешно отображается «Сортировка металлолома», как и ожидалось. Причина, по которой я использовал этот цикл, заключается в том, чтобы отображать несколько квестов при их добавлении.

Если бы кто-то был достаточно любезен, чтобы взглянуть на код и сказать мне, что я сделал неправильно, я был бы благодарен.

Спасибо.

Ответы [ 5 ]

2 голосов
/ 14 декабря 2010

Это может быть хорошей идеей распечатать SQL и запустить его для вашей базы данных, чтобы увидеть, какие результаты вы получите.Глядя на это, похоже, что в строке

$listquests3=mysql_fetch_array($listquests2);

может быть только один результат.Поскольку больше нет результатов, нечего зацикливаться.

0 голосов
/ 14 декабря 2010

Это утверждение: "$ listquests3 = mysql_fetch_array ($ listquests2);"уже получает первый.Так как у вас есть только один, больше ничего не нужно выбрать, поэтому следующий вызов mysql_fetch_array ничего не вернет.

Это должно исправить, но для вашего собственного «опыта», это может быть хорошим моментом, чтобы начать изучать соединения MySQL (в частности, LEFT JOIN).Вы можете легко найти много об этом в Интернете!

0 голосов
/ 14 декабря 2010

У вас есть только одна строка, и вы извлекли эту строку при первом вызове mysql_fetch_array.Когда вы вызываете его во второй раз, в наборе результатов больше нет строк для извлечения, функция возвращает false и ваш цикл завершается.

0 голосов
/ 14 декабря 2010

Вам нужно сделать ВНУТРЕННЕЕ СОЕДИНЕНИЕ или ЛЕВОЕ СОЕДИНЕНИЕ.Да, после тщательного изучения вопроса, я обнаружил, что при первом выполнении кода "mysql_fetch_array()" (непосредственно перед циклом "while") значение переменной "$listquests2" теряется.Так что цикл "while" ничего не дает.

Вы должны удалить эту единственную строку для переменной "$listquests3".

0 голосов
/ 14 декабря 2010

Результаты уже получены, поскольку есть только одно правило, и вы получили его в $ listquests3 :).Я думаю, это сработает, если вы удалите эту строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...