我对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”。我使用循环的原因是在添加循环时显示多个任务。
如果有人能够亲眼看看代码并告诉我我做错了什么,我将不胜感激。
谢谢。
答案 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)。您可以在互联网上轻松找到很多相关内容!