使用超链接深入PHP


drilling down in PHP using hyperlinks

我是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的公司,然后在"viewcountry_detail"页面上显示类似的布局。我不明白为什么表的输出会为数据库中country列的前两个id重复一行。任何帮助都将不胜感激,因为我在这里完全迷路了。感谢

我不明白为什么您使用mysql_fetch_row,然后不想实际使用您获取的行。

您不应该在此处使用mysql_result。您要做的是从结果集的第1行获取数据,然后从第2行获取数据(无论指针位于while循环中的哪一行)。

试试这个:

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

我个人发现,使用mysql_fetch_assocmysql_fetch_array时使用的关联键引用字段在代码中可读性要高得多。

尝试按如下方式构建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。

试试这个:

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

mysql_fetch_row返回一个数组。

无论如何

您应该考虑停止使用mysql_*函数——它们正被弃用。如果您切换到PDO或mysqli,它也有助于使您的代码更加安全。