2014-06-25 69 views
0

請有人幫助我。我有這樣的問題:將數據庫表存儲到數組php

我想從數據庫中獲取數據並將其存儲在數組中。例如:

我的產品表:

ID ::名::價格::數量

1 ::紅舞鞋:: 10 :: 2

2 ::黑裙子:: 20 :: 3

3 ::藍裙:: 30 :: 1

我想從該表獲得的數據在陣列的存儲這樣的:

$items = [ 
     array(
      'id' => '1', 
      'price' => 10, 
      'quantity' => 2, 
      'name' => 'Red Shoes' 
     ), 
     array(
      'id'=> '2', 
      'price' => 20, 
      'quantity' => 3, 
      'name' => 'Black Dress' 
     ), 
     array(
      'id'=> '3', 
      'price' => 30, 
      'quantity' => 1, 
      'name' => 'Blue Skirt' 
      ) 
    ]; 

我嘗試使用此代碼:

$query = mysql_query("SELECT * FROM product"); 
$data_item = array(); 

while ($row = mysql_fetch_array($query)) { 

    $data_item['id'] = $row['id']; 
    $data_item['price'] = $row['price']; 
    $data_item['quantity'] = $row['qty']; 
    $data_item['name'] = $row['name']; 

} 

$items = [$data_item]; 

print_r($items); 

這是輸出:

Array ([0] => Array ([id] => 3 [price] => 30 [quantity] => 1 [name] => Blue Skirt)) 

與該代碼我只是得到最後的數據和2個其他沒有內部陣列存儲。爲什麼會發生?

如何獲得輸出這樣的:

Array ([0] => Array ([id] => 1 [price] => 10 [quantity] => 2 [name] => Red Shoes) [1] => Array ([id] => 2 [price] => 20 [quantity] => 3 [name] => Black Dress) [2] => Array ([id] => 3 [price] => 30 [quantity] => 1 [name] => Blue Skirt) ) 

有人能幫助我嗎?

回答

1

兩個問題 - 你只是以這種方式抓取單個數組。 1)$items需要在while循環內以便抓取每個$row,並且2)$items需要是多維陣列(即,$data_item的陣列)。

while ($row = mysql_fetch_array($query)) { 

    $data_item['id'] = $row['id']; 
    $data_item['price'] = $row['price']; 
    $data_item['quantity'] = $row['qty']; 
    $data_item['name'] = $row['name']; 

    $items[] = $data_item; 

} 

從那裏,你可以通過$items陣列迭代看到您的所有商品。如果您執行print_r($items),則應該看到您期望的輸出。

此外,爲了記錄,您可以通過使用mysql_fetch_assoc()而不是mysql_fetch_array()來簡化 - 使用mysql_fetch_assoc()也會帶來關鍵(字段)值。然後,你可以簡化$items建設到一個單一的代碼行(通常做):

while ($row = mysql_fetch_assoc($query)) $items[] = $row; 

這應該給你相同的結果作爲首次嘗試,你print_r($items)時。

1

您的代碼正如現在所寫,覆蓋了while循環中每個迭代的$ data_item數組的部分。

while ($row = mysql_fetch_array($query)) { 

    $data_item[]['id'] = $row['id']; 
    $data_item[]['price'] = $row['price']; 
    $data_item[]['quantity'] = $row['qty']; 
    $data_item[]['name'] = $row['name']; 

} 

這應該可以解決你的問題,作爲一個側面說明,你可能想看看庫MySQLi或PDO的數據庫連接處理,因爲是mysql的出路,並與PHP版本棄用5.5+(http://www.php.net//manual/en/migration55.deprecated.php)此外,和mysqli結果類有一個很好的fetch_all方法來抓取查詢中的所有結果,以避免迭代行。

$sql = "SELECT * FROM product"; 
$result = mysqli_query($sql); 
$data_array = $result->fetch_all(MYSQLI_ASSOC); 

授予這個語法,你只限於使用數據庫列名作爲數組鍵,但它確實需要顯著更少的代碼來完成幾乎同樣的事情。

+0

+1表示不贊成使用的mysql。 –

相關問題