PHP MySQL虽然循环没有返回任何东西

时间:2010-12-14 12:39:04

标签: php mysql database while-loop

我对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

因此,任务通过npcid字段与NPC相关联。

我在每张桌子上都有一个条目。

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

你可以看到任务和鲍勃共享npcid为1。

在我的循环中,我试图列出Bob的所有任务。但是在运行代码时,我没有列出任何任务。

如果我把代码放在:

  $listquests3['name'];

在我的循环之外,它按预期成功显示“Sort Scrap Metal”。我使用循环的原因是在添加循环时显示多个任务。

如果有人能够亲眼看看代码并告诉我我做错了什么,我将不胜感激。

谢谢。

5 个答案:

答案 0 :(得分:2)

打印出SQL并对数据库运行它可能是一个好主意,看看你得到了什么结果。 看看这个看起来似乎只有一个结果可以在

中获取
$listquests3=mysql_fetch_array($listquests2);

线。由于没有更多的结果,没有什么可以循环。

答案 1 :(得分:0)

结果已经被提取,因为只有一个规则,你在$ listquests3 :)中获取它。如果你删除那条我认为它会起作用。

答案 2 :(得分:0)

您需要进行INNER JOIN或LEFT JOIN。在仔细查看问题之后,我发现在第一次执行“mysql_fetch_array()”代码时(就在“while”循环之前),变量“{{1} }“ 迷路。所以“$listquests2”循环没有任何结果。

您必须为变量“while”删除此单行。

答案 3 :(得分:0)

您只有一行,并且在您第一次调用mysql_fetch_array时获取了该行。当你第二次调用它时,结果集中不再有要获取的行,函数返回false并退出循环。

答案 4 :(得分:0)

此声明:“$ listquests3 = mysql_fetch_array($ listquests2);”已取得第一个。 Sicne你只有一个,没有什么可以获取的,所以下一次调用mysql_fetch_array将不会返回任何内容。

这应该解决它,但对于你自己的'经验',这可能是开始学习MySQL连接的好时机(特别是LEFT JOIN)。您可以在互联网上轻松找到很多相关内容!