将数据库表存储到数组php

时间:2014-06-25 19:08:07

标签: php mysql arrays

请有人帮助我。我有这样的问题:

我想从数据库中获取数据并将其存储在数组中。例如:

我的产品表:

ID ::名::价格::数量

1 :: Red Shoes :: 10 :: 2

2 ::黑色连衣裙:: 20 :: 3

3 :: Blue Skirt :: 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 ) )

使用该代码,我只获取最后一个数据,另外两个不存储在数组中。为什么会这样?

如何获得这样的输出:

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 )  )

有人能帮助我吗?

2 个答案:

答案 0 :(得分:1)

两个问题 - 你只是抓住一个阵列。 1)$items需要在while循环内部才能获取每个$row和2)$items需要是一个多维数组(即{{1}的数组}}为s)。

$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; 时的初始尝试结果相同。

答案 1 :(得分: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 result类有一个很好的fetch_all方法来从查询中获取所有结果,以避免迭代遍历行。

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

使用此语法,您仅限于使用数据库列名作为数组键,但它确实需要更少的代码来完成几乎相同的操作。