私はphpとmysqlには新しくなっていますので、もっと経験豊富な人が私にここでいくつかの指針を与えることができます。PHP MySQL whileループは何も返さない
私は、次のコードを持っている:
npcs
name|location|npcid
quests
name|qid|npcid
ので、クエストがnpcidフィールドを経由してNPCに関連している:私はこのようになりwhcihいくつかのテーブルを持ってこれを移動するには
<?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'];
}
?>
を。
私は各テーブルに1つのエントリを持っています。
Bob|Scrapyard|1
AND
Sort Scrap Metal|1|1
あなたは、私がボブのためのクエストをすべてリストしようとしているクエストとボブの両方を共有私のループでは1
のnpcidを見ることができるように。しかし、コードを実行すると、私はクエストはリストされません。それが成功し、予想通り「ソート金属スクラップ」と表示され、私のループの
$listquests3['name'];
外:私は、コードを置けば
。私がループを使用した理由は、それらを追加するときに複数のクエストを表示することです。
誰かがコードを見て、私が間違ったことを教えてくれたら、感謝します。
ありがとうございます。
+1あなたの最初のプロジェクト(の1つ)にクエストとnpcを含むものを作るために+1してください。 –
サンプルコードは非常に深刻な[セキュリティリスク](http://bobby-tables.com/)である[SQLインジェクション](http://unixwiz.net/techtips/sql-injection.html)の脆弱性があります。 。この穴を修正するには、旧式のmysqlドライバから[PDO](http://php.net/PDO)に切り替え、[prepared statements](http://www.php.net/PDO.prepared-statements)を使用してください。 PDOチュートリアルが必要な場合は、「PHPとPDOでMySQLスクリプトを書く」(http://www.kitebird.com/articles/php-pdo.html)を試してみてください。あなたが保存したサイトはあなた自身のものかもしれません。 HTMlを出力するときは、['' die''を使用しないでください。](http://www.phpfreaks.com/blog/or-die-must-die)。 – outis
[joins](http://en.wikipedia.org/wiki/Join_%28SQL%29)についてお読みください。複数のステートメントを実行するときに複数のステートメントを発行すると、非効率的でリソースが浪費されます。データベースがデータ操作を処理し、プログラムが他のすべてを処理するようにします。最後に、['SELECT *'](http://stackoverflow.com/questions/321299/what-is-the-reason-not-to-use-select)を使わないでください。必要な列だけを選択します。 – outis