如何在PHP预处理语句的每一步中添加一行?


How can I add a row within each step of a PHP prepared statement?

我有一个准备好的语句,它产生一个价格列表。价格是由商品价值乘以数量决定的。

if ($select = $db -> prepare("SELECT value, quantity FROM items"))
{
    $select -> execute();
    $select -> bind_result($value, $quantity);
    while ($select -> fetch())
    {
        $subtotal = $value * $quantity;
        echo $subtotal.'<br />';
    }
    $select -> close();
}
// I want to put the $total here.

输出一个数字列表:

100
50
200
1.50

我想以某种方式将每个$subtotal加起来,并将它们放入我准备好的语句之外的另一个变量"$total"中。这是可能做到没有做数学查询内?

在预备语句外声明一个变量$total = 0,并在while()循环中使用它来计算总价,如下所示:

$total = 0;
if ($select = $db -> prepare("SELECT value, quantity FROM items")){
    $select->execute();
    $select->bind_result($value, $quantity);
    while($select -> fetch()){
        $subtotal = $value * $quantity;
        $total += $subtotal;
    }
    $select->close();
}
echo $total;

旁注:正如@Fred-ii和@JuanTomas提到的,由于您使用的是没有任何占位符的预处理语句,因此您可以将->prepare()更改为->query(),同时完全删除->execute()语句,这对您的代码没有任何影响。