请有人帮助我。我有这样的问题:
我想从数据库中获取数据并将其存储在数组中。例如:
我的产品表:
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 ) )
有人能帮助我吗?
答案 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);
使用此语法,您仅限于使用数据库列名作为数组键,但它确实需要更少的代码来完成几乎相同的操作。