You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP+MySQLi计算商品总价总和显示异常,求排查错误

问题:计算商品库存总价值时结果显示为“Rp 1”的排查与修复

我想要计算oc_product表中状态为'1','2','3'的商品总价值,规则是每个商品取oc_stock_hpp表中最新的buy_price,乘以该商品的quantity后求和。用PHP与MySQLi写了代码,但最终结果显示为“Rp 1”,请问问题出在哪里?

原代码:

$query_nominal = "SELECT SUM(quantity*(SELECT shpp.buy_price FROM oc_stock_hpp shpp WHERE shpp.product_id = p.product_id  ORDER BY shpp.id DESC LIMIT 1)) as total FROM oc_product p WHERE status IN ('1','2','3')";
$result_nominal = mysqli_query($koneksi, $query_nominal);
$total_nilai_transaksi = mysqli_fetch_assoc($result_nominal);
?>
<body>
<?php echo "Rp " . number_format((float)$total_nilai_transaksi, 0, ',', '.'); ?>
</body>

问题根源

  1. 数组取值错误:mysqli_fetch_assoc()返回的是关联数组,你直接把整个数组传给number_format()时,PHP会将数组强制转换为布尔值true,而(float)true等于1,这就是结果显示“Rp 1”的核心原因。必须取出数组中total键对应的实际计算值。
  2. SQL潜在隐患:如果某个商品在oc_stock_hpp中没有对应记录,子查询会返回NULL,导致该商品的计算值为NULL,SUM()函数会自动跳过这类值,可能造成结果不符合预期。

修复后的代码

<?php
$query_nominal = "SELECT SUM(quantity*(SELECT shpp.buy_price FROM oc_stock_hpp shpp WHERE shpp.product_id = p.product_id  ORDER BY shpp.id DESC LIMIT 1)) as total FROM oc_product p WHERE status IN ('1','2','3')";
$result_nominal = mysqli_query($koneksi, $query_nominal);
// 取出total字段的值,若查询结果为空则默认设为0
$total_data = mysqli_fetch_assoc($result_nominal);
$total = isset($total_data['total']) ? (float)$total_data['total'] : 0;
?>
<body>
<?php echo "Rp " . number_format($total, 0, ',', '.'); ?>
</body>

额外优化建议

  • 处理无库存记录的商品:用COALESCE函数确保子查询无结果时返回0,避免NULL影响计算:
    SELECT SUM(quantity*COALESCE((SELECT shpp.buy_price FROM oc_stock_hpp shpp WHERE shpp.product_id = p.product_id ORDER BY shpp.id DESC LIMIT 1), 0)) as total FROM oc_product p WHERE status IN ('1','2','3')
    
  • 增加错误判断:防止SQL查询失败导致的异常:
    $result_nominal = mysqli_query($koneksi, $query_nominal);
    if (!$result_nominal) {
        die('查询失败: ' . mysqli_error($koneksi));
    }
    

内容的提问来源于stack exchange,提问作者wenza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:42:51