我是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_assoc
或mysql_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,它也有助于使您的代码更加安全。