2013-07-29 105 views
1

我希望迭代從數據庫中獲取的元素
但結果看起來非常意外。
我發現下面的代碼打印$valueecho "<td id=".$key.$tag.">".$value."</td>";兩次。有什麼我誤解?mysql_fetch_array獲取日期獲取每個元素兩次

function selectTable($table){ 
     $sql= "SELECT * FROM ".$table ; 
     $result=mysql_query($sql) 
          or die(mysql_error()); 
     return $result; 
    } 

    $table = 'battery_con'; 
    $result = selectTable($table); 
    unset($table); 

while($row = mysql_fetch_array($result)){ 
     ...... 
     foreach ($row as $key => $value) { 
        print $value; 
        echo "<td id=".$key.$tag.">".$value."</td>"; 
       }  
     ..... 
    } 
+1

題外話,只是提醒你:'mysql_xxx()'在PHP功能已被棄用。您應該考慮爲您的數據庫代碼使用更現代的庫,如PDO。 – Spudley

+0

@Spudley我知道,但仍然欣賞你的想法 – andyqee

+0

@Akam查詢更新。謝謝 – andyqee

回答

3

您正在使用mysql_fetch_array其默認返回每列兩個元素(這是第二個(可選)放慢參數的意思數組: result_type = MYSQL_BOTH)。

一個索引表示列索引的整數,一個索引列名。

這就是爲什麼你在列表中得到兩個條目。您可以將第二個參數設置爲MYSQL_ASSOC以獲得每列僅一個值。

3

請使用mysql_fetch_assoc()地方mysql_fetch_array() 我希望這將有助於

+0

@sonusindhhu你能解釋爲什麼嗎? – andyqee

+1

mysql_fetch_array返回兩個索引之一是整數像和第二個是字段名稱 –

+0

@sonusindhhu酷,非常感謝 – andyqee

1

除了@安德烈亞斯的答案默認mysql_fetch_array同時給出關聯和數字索引,如果你不希望這樣,你可以在你的while循環與第二個參數限制它:

$row = mysql_fetch_array($result, MYSQL_NUM); // numeric keys only 
$row = mysql_fetch_array($result, MYSQL_ASSOC); // associative keys only 

如前所述通過@sonusindhu,你也可以使用mysql_fetch_row來獲得數字鍵,或者使用mysql_fetch_assoc來獲得聯想鍵。

更新

的mysql_xxx()函數被棄用,你應該考慮使用mysqli_xxx()函數。

看到了PHP手冊的例子1瞭解更多詳情: http://php.net/manual/en/mysqli-result.fetch-array.php