从SQL数据库表中定义各种变量 - 更好的做法?

时间:2016-01-03 23:03:33

标签: php mysql arrays mysqli

我有一个如下所示的数据库:

Name       | WebsitePrice | WebsiteStock |
-----------------------------------------
football   |   20         | Yes          |
-----------------------------------------
basketball |   10         | No           |
-----------------------------------------
hockey     |   30         | Yes          |
-----------------------------------------

我想为每个项目创建2个变量:

  1. 商品价格
  2. 项目库存。
  3. 这是我提出的最短路:

    $item1 = "football";
    $item2 = "basketball";
    $item3 = "tennis-ball";
    
    $productList = array();
    $products = $mysqli->query("select * from table_products where Name IN ('$item1', '$item2', '$item3')");
    if($products){
        while($product = mysqli_fetch_assoc($products)){
            $productList[$product['Name']]['WebsitePrice'] = $product['WebsitePrice'];
            $productList[$product['Name']]['WebsiteStock'] = $product['WebsiteStock'];
        }
    }
    
    //first product: 
    
    $price1 = $productList[$item1]['WebsitePrice']; 
    $stock1 = $productList[$item1]['WebsiteStock'];
    
    //second product: 
    
    $price2 = $productList[$item2]['WebsitePrice'];
    $stock2 = $productList[$item2]['WebsiteStock'];
    
    //third product: 
    
    $price3 = $productList[$item3]['WebsitePrice'];
    $stock3 = $productList[$item3]['WebsiteStock'];
    

    对我来说看起来很混乱。 有没有更好的方法来做到这一点?特别是如果我们假设我可能有20个项目而不仅仅是3个。

    例如,有没有办法跳过编写整个('$item1', '$item2', '$item3')行并使该行引用第一个代码块中定义的项目数?

2 个答案:

答案 0 :(得分:1)

如果要直接从数据库回显字段,请为字段指定别名,如:

SELECT Name, WebsitePrice as PriceOfItem, WebsiteStock as StockOfItem from table_products where Name IN ('$item1', '$item2', '$item3')

答案 1 :(得分:1)

以下是我将代码更改为动态代码的方法:

<?php

$con = mysqli_connect("localhost","test_user","user1234","test");

// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

//turn items into an array
$item_array = array('football','basketball','tennis-ball');

//implode items, turn into string
//result for this string is football','basketball','tennis-ball
$item_implode = join("','", $item_array);

//declare an overall array for result
$product_items = array();

$productList = array();
$result = $con->query("select * from table_products where Name IN ('$item_implode')");

if ($result->num_rows > 0) {
    $x = 0;
    // output data of each row
    while($row = $result->fetch_assoc()) {
        $product_items[$x]["Name"] = $row['Name'];
        $product_items[$x]["WebsitePrice"] = $row['WebsitePrice'];
        $product_items[$x]["WebsiteStock"] = $row['WebsiteStock'];
        $x = $x + 1;
    }
} else {
    echo "0 results";
}

//can access data by $product_items[index][attribute]
//prints all
for ($i=0; $i < count($product_items); $i++) { 
    echo $product_items[$i]["Name"] . " - ";
    echo $product_items[$i]["WebsitePrice"] . " - ";
    echo $product_items[$i]["WebsiteStock"] . "<br/>";
}
?>

结果应为:

football - 20 - Yes
basketball - 10 - No

您可以通过添加/附加到$ item_array来添加项目。