2009-12-22 16 views
1
<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> 

PHP回聲重複行的時候沒有這樣的

此代碼執行沒有錯誤,但輸出包含像這樣每行每列的副本。

<table border='2'><tr>The Peeps</tr>
<tr><td>"matt"</td><td>"matt"</td><td>"phillips"</td><td>"phillips></td><td>"[email protected]"</td><td>"[email protected]"</td><td>20</td><td>20</td></tr><tr><td>"paul"</td><td>"paul"</td><td>"franklin"</td><td>"franklin"</td><td>"[email protected]"</td><td>"[email protected]"</td><td>30</td><td>30</td></tr><tr><td>"steve"</td><td>"steve"</td><td>"jobs"</td><td>"jobs"</td><td>"[email protected]"</td><td>"[email protected]"</td><td>23</td><td>23</td>

我不明白爲什麼當只在echo語句單<td></td>標籤中的每個列被複制。
我也檢查了數據庫和表不包含重複的條目。

+0

換出mysql_fetch_array與mysql_fetch_assoc替換(mysql_fetch_array回報數字和如果不另行指定關聯) – OneNerd 2009-12-22 17:20:15

回答

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將只檢索任一分別關聯值或數字索引值。

6

這是mysql_fetch_array做,如果你不提供第二個參數:讓你當值映射到兩列名和列索引的關聯數組。

您可以提供MYSQL_ASSOC作爲第二個參數,只有列名(或使用mysql_fetch_assoc)。

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它給你回數字索引陣列associ atively。或者,您可以使用mysql_fetch_row()(返回數字索引的數組)或mysql_fetch_assoc()(返回關聯數組)而不是mysql_fetch_array()

+0

MYSQL_NUM將與controlfreak123了代碼工作,但它通常是一個不錯的辦法,因爲你永遠不應該承擔選擇字段以相同的順序從數據庫中出來。如果您更改了CREATE TABLE,或者使用了SELECT field1,field2而不是* – 2009-12-22 17:14:21

+0

@Anti Veeranna:如果您使用「foreach」迭代結果,「MYSQL_NUM」與「MYSQL_ASSOC」有什麼不同? '? – Asaph 2009-12-22 17:29:58

0

簡單。

如果你的SQL查詢

SELECT foo FROM bar 

然後mysql_fetch_array返回2分的結果。一個帶有數字索引,一個帶有字段名稱。將print_r($ r)添加到代碼中以查看行爲。

解決方案?Use mysql_fetch_assoc

相關問題