PDO语句断开循环

时间:2018-04-12 14:52:38

标签: php sql

我正在建立一个电子商务网站,并设置了一个cron作业,每隔一段时间运行一个PHP脚本,以便在付款完成后与我的支付网关进行通信并更新我的数据库。

以下注释掉的代码为我提供了所有交易ID,其状态符合预期。它也会进入if($status == 'settled')语句,因此我可以在每个语句之后看到单词test。

$params = ['processing payment'];
$sql = "SELECT * FROM orders WHERE status=?";
$stmt = DB::run($sql,$params);
$orderCount = $stmt->rowCount();
if ($orderCount > 0) {
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
        $id = $row["id"];
        $transaction_id = $row["transaction_id"];

        $transaction = Braintree_Transaction::find($transaction_id);
        $status = $transaction->status;

        echo $transaction_id.' - '.$status.'<br />';

        if($status == 'settled'){
            echo 'test<br />';
            $params = ['payment settled',$id];
            $sql = "UPDATE orders SET status=?, date_last_status_change=now() WHERE id=?";
            // $stmt = DB::run($sql,$params);
        }
    }
}

然而,当我取消注释该行时,它只会回显第一个id并测试并且只更新数据库中的第一个条目,它似乎只是停止循环而我无法找出原因。有问题的行是正确的,因为这是我执行所有查询的方式,它确实更新了第一个条目。

对此有任何帮助或帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

为将来参考,请重命名嵌套查询:

$params = [];
$sql = "";
$stmt = DB::run($sql,$params);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
    $params1 = [];
    $sql1 = "";
    $stmt1 = DB::run($sql1,$params1);
}