【发布时间】:2026-01-08 20:25:02
【问题描述】:
我正在使用 php 从 mysql 数据库中使用一组值提取数据。
我的初始数组 $models 是一个零件编号列表,如下所示:
Array (
[0] => AB-1
[1] => AB-2
[2] => BCA-2
[3] => DE3
)
这是设置我的数据的 foreach,以便我可以在模板页面上显示产品:
$products = array();
foreach ($models as $key => $prod_num) {
$product_info = $this->model_extension_news->getModelInfo($prod_num);
if ($product_info['image']) {
$image = $this->model_tool_image->resize($product_info['image'], $this->config->get('config_image_wishlist_width'), $this->config->get('config_image_wishlist_height'));
} else {
$image = false;
}
if ($product_info['quantity'] <= 0) {
$stock = $product_info['stock_status'];
} elseif ($this->config->get('config_stock_display')) {
$stock = $product_info['quantity'];
} else {
$stock = $this->language->get('text_instock');
}
if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
$price = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));
} else {
$price = false;
}
$products[] = array(
'product_id' => $product_info['product_id'],
'thumb' => $image,
'name' => $product_info['name'],
'model' => $product_info['model'],
'stock' => $stock,
'price' => $price,
'href' => $this->url->link('product/product', 'product_id=' . $product_info['product_id']),
);
}
我访问数据库以从名为 getModelInfo() 的函数中查找 $product_id 和其他信息(我使用的是 opencart 框架):
public function getModelInfo($prod_num){
$query = $this->db->query("SELECT p.product_id, pd.name AS name, p.model AS model, p.image, p.price, p.quantity FROM " . DB_PREFIX ."product p LEFT JOIN ".DB_PREFIX."product_description pd ON p.product_id = pd.product_id WHERE p.model = '".$prod_num."'");
return array(
'product_id' => $query->row['product_id'],
'name' => $query->row['name'],
'model' => $prod_num,
'image' => $query->row['image'],
'price' => $query->row['price'],
'quantity' => $query->row['quantity'],
);
}
问题是我的返回数组不完整。第一个结果已填写,但其他结果从数据库返回空白信息。我知道数据库中有这些产品的数据......我不明白为什么我的 $products 数组中的最后 3 个产品没有显示数据:
Array (
[0] => Array (
[product_id] => 18713
[thumb] => http://www.website.com/image/AB-1.jpg
[name] => AB-1 FULL
[model] => AB-1
[stock] => 79
[price] => $168.00
[href] => http://www.website.com/index.php?route=product/product&product_id=18713
)
[1] => Array (
[product_id] =>
[thumb] =>
[name] =>
[model] => AB-2
[stock] =>
[price] => 0
[href] => http://www.website.com/index.php?route=product/product&product_id=
)
[2] => Array (
[product_id] =>
[thumb] =>
[name] =>
[model] => BCA-2
[stock] =>
[price] => 0
[href] => http://www.website.com/index.php?route=product/product&product_id=
)
[3] => Array (
[product_id] =>
[thumb] =>
[name] =>
[model] => DE-3
[stock] =>
[price] => 0
[href] => http://www.website.com/index.php?route=product/product&product_id=
)
)
我在这里缺少什么?我在 foreach 中做错了吗?还有其他方法可以设置 $products 吗?我似乎看不出这段代码出了什么问题。感谢您提供任何帮助(或重定向到此问题的已解决版本)!
【问题讨论】:
-
您正在执行左连接,这意味着结果必须满足单个表。尝试使用完整的 JOIN(两个表),然后是 RIGHT JOIN(单个表但另一侧)。
-
我刚刚尝试了 JOIN、INNER JOIN 和 RIGHT JOIN。返回的结果没有区别...
-
在第一次 foreach 之前定义 $products = array();然后试试?
-
我的完整功能中有这个。 (我没有发布整件事,因为它有一堆不相关的东西)。我会把它添加到 sn-p 中。
-
检查您的数据是否有一致的值。您正在加入产品 id ON p.product_id = pd.product_id WHERE p.model = '".$prod_num."'" 这意味着所有产品都必须具有 id 和模型,对于调用的查询字段,任何字段都不能为空
标签: php mysql arrays multidimensional-array opencart