我正在尝试为发票系统创建产品属性的概述。 到目前为止,大多数事情都是使用类和PDO组合在一起的。 我有以下问题。
在我的班上,我创建了一个构建我的产品数组的函数。 它从数据库加载一些信息,以构建此数组。 这个数组,我想用来显示我选择的所有产品:
$ prod1 - $ prod1Name - $ prod1Descr - $ prod1Price
$ prod2 - $ prod2name - $ prod2Descr - $ prod2Price
等
我认为关联数组可以帮助我创建列。
虽然问题是,我不明白如何以这种方式创建多个行和列。
我在考虑类似的事情:
$ prod [1] [“name”] - $ prod [1] [“descr”] - 等
然后在foreach循环中使用它来创建所需数量的新行。
我唯一想到的就是我的index.php(如下所示),因为使用索引([1] defenition)似乎不像我认为应该实现的那样工作。
根据我的理解,我将类中的var指定为数组,然后在加载数据库信息时重新定义数组。
谁能告诉我如何才能解决这个问题?
我有以下课程:
<?
class Invoice{
var $vendorID;
var $product = array();
function product_array(){
global $db;
$query = $db->conn->prepare('
SELECT ProductName, ProductDescription, ProductDuration, ProductPriceInclVat, ProductPriceExclVat, ProductVatType
FROM products WHERE VendorID = :VendorID
');
$array = array (
'VendorID' => $this->vendorID
);
$query->execute($array);
$result = $query->fetchall();
if (empty($result)){
echo"Could not find any products matching your criteria.";
die;
} else {
foreach($result as $row) {
$this->product = array("Name" => $row['ProductName'],
"Description" => $row['ProductDescription'],
"Duration" => $row['ProductDuration'],
"PriceExclVat" => $row['ProductPriceExclVat'],
"PriceInclVat" => $row['ProductPriceInclVat'],
"VatType" => $row['ProductVatType']
);
}
}
}
}
?>
然后我在index.php上有以下代码:
<?
$invoice = new Invoice();
foreach ($invoice->product as $key => $value){
echo $key . "<br>";
echo $value . "$value";
echo "<br>";
}
?>
答案 0 :(得分:0)
将结果数组分配给product属性时,每次都会覆盖数组。你需要附加到数组,所以像:
$this->product = array();
foreach($result as $row) {
$this->product[] = array(...);
}
或者,您可以将fetchAll的结果分配给product属性,如果您不需要重命名字段键(或者您可以在SQL中对它们进行别名)。
答案 1 :(得分:0)
$query = $db->conn->prepare('
SELECT ProductName as Name,
ProductDescription as Description,
ProductDuration as Duration,
ProductPriceInclVat as PriceInclVat,
ProductPriceExclVat as PriceExclVat,
ProductVatType as VatType
FROM products WHERE VendorID = :VendorID
');
$array = array (
'VendorID' => $this->vendorID
);
$query->execute($array);
$product = $query->fetchall(PDO::FETCH_ASSOC);
$ product现在采用您需要的格式。 在此之后,您可以避免在类发票中使用foreach循环。 另外我注意到你已经创建了函数product_array(),它没有被调用, 所以在index.php中你得到的是空数组(在类Invoice中定义)。 所以在Invoice类中它应该是
$product = product_array()
和product_array函数应该返回值。