我正在建立一个电子商务网站,并设置了一个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并测试并且只更新数据库中的第一个条目,它似乎只是停止循环而我无法找出原因。有问题的行是正确的,因为这是我执行所有查询的方式,它确实更新了第一个条目。
对此有任何帮助或帮助将不胜感激。
答案 0 :(得分:0)
为将来参考,请重命名嵌套查询:
$params = [];
$sql = "";
$stmt = DB::run($sql,$params);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$params1 = [];
$sql1 = "";
$stmt1 = DB::run($sql1,$params1);
}