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”页面上显示类似的布局。我无法弄清楚为什么表格的输出为我在数据库中的国家列的前两个 id 提供了重复的行。任何帮助将不胜感激,因为我在这里完全迷失了。谢谢

4

3 回答 3

2

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

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

试试这个:

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

mysql_fetch_assoc我个人发现在代码中通过使用or时使用的关联键来引用字段更具可读性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_*函数已开始弃用过程,不应再使用,甚至mysql_*不鼓励使用 php 手册页状态。研究使用类似的mysqli_* 函数或 PDO。

于 2012-09-11T15:08:49.747 回答
0

试试这个:

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

mysql_fetch_row返回一个数组。

然而

You should look at stopping using the mysql_* functions - they're being deprecated. If you switch to PDO or mysqli, it helps make your code more secure, too.

于 2012-09-11T15:10:51.290 回答