2012-12-23 60 views
3

好了,所以我所擁有的一切先天的恐懼的MySQLMySQL和PHP排陣

這裏是我的表:

+----+-----------------+------+ 
| id | name   | age | 
+----+-----------------+------+ 
| 1 | Timmy Mellowman | 23 | 
| 2 | Jeff Johnson | 18 | 
+----+-----------------+------+ 

這裏是我的PHP code連接到數據庫外)

$raw = mysql_query("SELECT * FROM example") or die(mysql_error()); 
$row = mysql_fetch_array($raw); 
echo "\n\n"; 
print_r($row); 

所以這是我的輸出:

Array 
(
    [0] => 1 
    [id] => 1 
    [1] => Timmy Mellowman 
    [name] => Timmy Mellowman 
    [2] => 23 
    [age] => 23 
) 

爲什麼這是輸出?雙名?爲什麼爲[1]和[名稱]設置名稱?

而且就在身邊是他們使用PHP與MySQL

+1

** Heads up!** PHP的下一個主要版本是*棄用* mysql_'系列函數。由於您似乎正在學習如何使用PHP,現在將是[切換到PDO](http://php.net/book.pdo)或[mysqli](http://php.net/book .mysqli)。 – Charles

+0

這是定義的行爲;嚴格來說,這是PHP的一個「特性」,而不是MySQL。MySQL只返回值的一個副本; PHP使用兩種索引來填充數組:按數字位置和按名稱。您可以使用傳遞給'mysql_fetch_array'函數的附加參數指定要使用哪些索引(名稱,數字或兩者)。默認情況下,當你沒有指定時,是兩個。 – spencer7593

回答

5

PHP docs爲mysql_fetch_array一個更好的辦法:

返回字符串數組對應於提取行,或 如果沒有更多行,則返回FALSE。返回數組的類型取決於 如何定義result_type。 通過使用MYSQL_BOTH(默認),您將得到一個具有關聯索引和數字索引的數組 。使用MYSQL_ASSOC, 您只能得到關聯索引(如mysql_fetch_assoc()工作),使用 MYSQL_NUM,您只能獲得數字索引(如mysql_fetch_row()工作)。

所以在你的行$row = mysql_fetch_array($raw); $ row接收一個既有關聯索引又有數字索引的數組,因爲這是默認值。如果只需要關聯索引,請使用$row = mysql_fetch_array($raw,MYSQL_ASSOC);(或mysql_fetch_assoc()),或者只需要數字索引,請使用$row = mysql_fetch_array($raw,MYSQL_NUM);(或mysql_fetch_row())。

要取得所有的行,使用這樣的:如果沒有指定返回類型

while ($row = mysql_fetch_array($raw)) { 
    echo "<p>" . $row['id'] . " - " . $row['name'] . " - " . $row['age'] . "</p>\n"; 
} 
+0

謝謝,很好的回答,因爲我明白你的意思 - 但它只顯示第一人的數​​據?不應該SELECT * FROM示例返回所有行? –

+1

它確實存在,但您只是檢索第一條記錄。你將不得不循環來檢索它們。請參閱我的答案中的鏈接示例#2。 – j08691

+0

你能更具體嗎?仍然有點困惑,爲什麼我需要循環,我該怎麼做?我已經看到,雖然這樣做的聲明,但我只是一遍又一遍地重新運行相同的命令,每次都會自動向下移動一行? –

1

,默認爲mysql_fetch_array ($raw ,MYSQL_BOTH) 返回如上兩者關聯和數字索引。

對於數字索引使用

$row = mysql_fetch_array($raw, MYSQL_NUM) 

對於關聯索引使用

$row = mysql_fetch_array($result, MYSQL_ASSOC) 

爲了訪問所有行while循環

while ($row = mysql_fetch_array($row, MYSQL_NUM)) { 
    printf("ID: %s Name: %s Age:%s", $row[0], $row[1],$row[2]); 
} 

,或者如果正在使用關聯索引

使用