php - PDO for 循环问题

标签 php mysql pdo

我有一个函数可以根据数量计算价格。
该函数应该循环遍历每个订单并根据数量计算每个产品的价格,然后返回订单总价。
我做错了什么?

public function getSumaComanda($cos) {
    $suma = $this->_db->query(sprintf("SELECT (@pretredus:=`pretredus`) AS `pretredus`,(CASE @pretredus WHEN 0 THEN `prettotal` ELSE `pretredus` END) AS `prettotal` , cantitate  FROM comenzi WHERE cos = '%d'", $cos));
    $suma->execute();
    $data_array = $suma->fetchAll(PDO::FETCH_ASSOC);

    $count = $this->_db->query(sprintf("SELECT COUNT(*) FROM cosuri WHERE id='%d'", $cos));
    $num = $count->fetchColumn();


    for ($x = 0; $x < $num; $x++) {
        $price = $data_array['cantitate'][$x] * $data_array['prettotal'][$x];
        $pret = $pret + $price;
        $pret = number_format($pret, 2, ".", "");

    }

    $rez = $pret;
    return $rez . ' Lei';
}

最佳答案

您应该学习如何从根本上调试变量。通过使用 var_dump($data_array); 你可以看到里面有什么。

您必须首先使用数字索引:

$price = $data_array[$x]['cantitate'] * $data_array[$x]['prettotal'];

尽管如此,您的第二个查询毫无用处。您不必计算结果,可以使用 while 循环来代替:

public function getSumaComanda($cos) {
    $suma = $this->_db->query(sprintf("SELECT (@pretredus:=`pretredus`) AS `pretredus`,(CASE @pretredus WHEN 0 THEN `prettotal` ELSE `pretredus` END) AS `prettotal` , cantitate  FROM comenzi WHERE cos = '%d'", $cos));
    $suma->execute();

    while ($data_array = $suma->fetch(PDO::FETCH_ASSOC)) {
        $pret += $data_array['cantitate'] * $data_array['prettotal'];
    }

    return number_format($pret, 2, ".", "") . ' Lei';
}

关于php - PDO for 循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26081662/

相关文章:

php - 如何为从数据库查询数据的选择下拉列表设置标题

php - RSS 提要不显示 PHP 变量

php - 使用 PHP PDO 事务的单个与多个 SQL UPDATE 性能

javascript - 我正在尝试使用 php 中的 pdo 在 sql server 中插入日期和时间

PHP RSA-公钥base64编码

php - 在 PHP 中迭代 MASSIVE CSV 文件的最佳实践

php - 为什么 gettype() 说它是 double 型而 var_dump() 说它是 float ?

php - PHP源代码未在执行,它显示在呈现的页面上

使用 GROUP BY 时 MySQL SUM 不起作用

PHP无法从mysql获取数据