我是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'页面上显示类似的布局。我无法解决为什么表的输出为db中的country列的前两个id提供重复行。任何帮助将不胜感激,因为我完全迷失在这里。谢谢
答案 0 :(得分: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
或mysql_fetch_array
时使用的关联键引用字段时,代码更具可读性。
答案 1 :(得分: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_* functions或PDO。
答案 2 :(得分:0)
试试这个:
while ($row = mysql_fetch_row($data)) {
$cid = $row[0];
$cname = $row[1];
...
}
mysql_fetch_row
返回一个数组。
<强>无论其强>
您应该考虑停止使用mysql_ *函数 - 它们已被弃用。如果你切换到PDO或mysqli,它也有助于使你的代码更安全。