0

私はPHPの初心者ですが、次のコードで問題が発生しました...

<?php 
 // Connects to Database 
 mysql_connect("localhost", "root") or die(mysql_error()); 
 mysql_select_db("test") or die(mysql_error()); 
 $data = mysql_query("SELECT country_id, country_name FROM country, channels WHERE channels.channel_id = country.channel_id AND channels.channel_id = '1'") 
 or die(mysql_error()); 
  echo "<table border=0 cellpadding=15>";
echo "<tr align = center bgcolor=white>
<td><b>Country ID</b></td><td><b>Country Name</b></td>" ; 
 while (mysql_fetch_row($data)) {
$cid = mysql_result($data, 1);
$cname = mysql_result($data, 2);

# inserts value into table as a hyperlink

echo "<tr align = center bgcolor=white><td>$cid</td><td><a href=view_country_detail.php?cid=$cid>$cname</td>";
}

# displays table

print '</table>';

 ?>

私が直面している問題を説明するために、上記のコードからクリックする国のIDを共有する会社にドリルダウンするハイパーリンクを生成した後、「view_country_detail」ページに同様のレイアウトを表示します。テーブルの出力で、データベースのcountry列の最初の2つのIDに繰り返し行が表示される理由がわかりません。私はここで完全に失われているので、どんな助けでも大歓迎です。ありがとう

4

3 に答える 3

2

mysql_fetch_rowフェッチした行を実際に使用したくない理由がわかりません。

ここでは使用しないでmysql_resultください。あなたがしていることは、結果セットの行 1 からデータをフェッチし、次に行 2 からデータをフェッチすることです。

これを試して:

while ($row = mysql_fetch_assoc($data)) {
    $cid = $row['country_id'];
    $cname = $row['country_name'];
}

mysql_fetch_assoc個人的には、またはを使用するときに使用される連想キーでフィールドを参照するコードの方がはるかに読みやすいと思いますmysql_fetch_array

于 2012-09-11T15:08:39.393 に答える
1

while次のようにループを構成してみてください。

while($row = mysql_fetch_array($data)){
      $cid = $row[0];  //if you have the column names, replace 0 with 'column_name'
      $cname = $row[1];

      //then echo statement
 }

また、mysql_*関数は非推奨プロセスを開始したため、もはや使用すべきではありません。PHP のマニュアル ページでの使用は推奨されないと述べていても、使用しないでmysql_*ください。同様のmysqli_* 関数または PDO の使用を検討してください。

于 2012-09-11T15:08:49.747 に答える
0

これを試して:

while ($row = mysql_fetch_row($data)) {
    $cid = $row[0];
    $cname = $row[1];
    ...
}

mysql_fetch_row配列を返します。

でも

mysql_*関数の使用を停止することを検討する必要があります-それらは非推奨になっています。PDOまたはmysqliに切り替えると、コードの安全性も高まります。

于 2012-09-11T15:10:51.290 に答える