PHP不存在时回显重复行

时间:2009-12-22 17:05:32

标签: php mysql html

<html>
<head>
<title>Test</title>
<link rel="stylesheet" type="text/css" href="style.css"> 
</head>
<body>
    <?php 
       $username ="matt";
       $pass = "bs12kfj";
       $db = "mytest";
       $tbl = "test2";
       mysql_connect(localhost,$username,$pass);
       mysql_select_db($db) or die( "Unable to select database");
       $res = mysql_query("SELECT * FROM test2;");
       $num = mysql_numrows($res);
       echo "<table border='2'><tr>The Peeps</tr>"; 
       while ($r = mysql_fetch_array($res)) {
         echo "<tr>";
         foreach($r as $rs){
                     echo "<td>$rs</td>";
                     }
         echo "</tr>";
       }
       ?>

</body>

此代码执行时没有错误,但输出包含每行的每一列的副本,如此。

<table border='2'><tr>The Peeps</tr>
<tr><td>"matt"</td><td>"matt"</td><td>"phillips"</td><td>"phillips></td><td>"mathew.p@waburg.com"</td><td>"mathew.p@waburg.com"</td><td>20</td><td>20</td></tr><tr><td>"paul"</td><td>"paul"</td><td>"franklin"</td><td>"franklin"</td><td>"dude@live.com"</td><td>"dude@live.com"</td><td>30</td><td>30</td></tr><tr><td>"steve"</td><td>"steve"</td><td>"jobs"</td><td>"jobs"</td><td>"sjobs@apple.com"</td><td>"sjobs@apple.com"</td><td>23</td><td>23</td>

如果echo语句中只有一个<td></td>标记,我不明白为什么每列都重复。
我还检查了数据库,表中没有重复的条目。

4 个答案:

答案 0 :(得分:6)

如果你没有提供第二个参数,这就是mysql_fetch_array的作用:获取一个关联数组,其中值被映射到列名和列索引。

您可以提供MYSQL_ASSOC作为第二个参数,只包含列名(或使用mysql_fetch_assoc)。

答案 1 :(得分:2)

您可能正在以MYSQL_BOTH的默认模式获取MySQL结果数组。

试试这个:

while ($r = mysql_fetch_array($res,MYSQL_ASSOC)) {
             echo "<tr>";
     foreach($r as $rs){
                 echo "<td>$rs</td>";
                 }
             echo "</tr>";
       }

如果你没有为mysql_fetch_array()指定第二个参数,那么使用MYSQL_BOTH,你最终得到一个值的关联数组索引和一个数字数组索引,如下所示:

array(0 => 'field 1 val', 'field1_name'=> 'field 1 val',
      1 => 'field 2 val', 'field2_name'=> 'field 2 val', etc);

指定MYSQL_ASSOCMYSQL_NUM将仅分别检索关联值或数字索引值。

答案 2 :(得分:1)

更改

while ($r = mysql_fetch_array($res)) {

while ($r = mysql_fetch_array($res, MYSQL_NUM)) {

while ($r = mysql_fetch_array($res, MYSQL_ASSOC)) {

mysql_fetch_array()的第二个参数的默认值为MYSQL_BOTH,它会返回一个以数字方式关联索引的数组。或者,您可以使用mysql_fetch_row()(返回数字索引数组)或mysql_fetch_assoc()(返回关联数组)而不是mysql_fetch_array()

答案 3 :(得分:0)

易。

如果您的SQL查询是

SELECT foo FROM bar

然后mysql_fetch_array返回2个结果。一个带有数字索引,一个带有字段名称。在代码中添加print_r($ r)以查看行为。

解决方案? Use mysql_fetch_assoc