2014-06-25 35 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。 –

相关问题