将URL参数传递给PHP API函数 解决订单筛选返回空问题
问题修复方案
核心错误原因
mysqli_stmt::execute()方法要求传入的绑定参数必须是数组类型,你直接传入了整型的$last_oid标量值,导致参数绑定失败,查询条件不生效,最终返回空结果。- 若你使用的PHP版本低于8.1,mysqli的
execute()方法本身不支持直接传参绑定,必须先调用bind_param方法完成参数绑定后再执行查询。
修复方案
方案1:适配PHP 8.1及以上版本
仅需修改getOrders函数中的execute调用行,将参数包裹为数组即可:
function getOrders($last_oid){ $stmt = $this->con->prepare("SELECT oid, uid, order_num, create_date, status_date FROM orders WHERE oid > ?"); // 原错误写法:$stmt->execute($last_oid); $stmt->execute([$last_oid]); // 修改为传入数组 $stmt->bind_result($oid, $uid, $order_num, $create_date, $status_date); $orders = array(); while($stmt->fetch()){ $order = array(); $order['oid'] = $oid; $order['uid'] = $uid; $order['order_num'] = $order_num; $order['create_date'] = $create_date; $order['status_date'] = $status_date; array_push($orders, $order); } return $orders; }
方案2:兼容所有PHP版本的稳妥写法
手动调用bind_param方法绑定参数类型,适配低版本PHP环境:
function getOrders($last_oid){ $stmt = $this->con->prepare("SELECT oid, uid, order_num, create_date, status_date FROM orders WHERE oid > ?"); // 绑定参数,i表示参数为整型 $stmt->bind_param('i', $last_oid); $stmt->execute(); $stmt->bind_result($oid, $uid, $order_num, $create_date, $status_date); $orders = array(); while($stmt->fetch()){ $order = array(); $order['oid'] = $oid; $order['uid'] = $uid; $order['order_num'] = $order_num; $order['create_date'] = $create_date; $order['status_date'] = $status_date; array_push($orders, $order); } return $orders; }
调试建议
如果修改后仍有问题,可以在execute()执行后添加var_dump($stmt->error);输出SQL错误信息,快速定位其他潜在问题。
内容的提问来源于stack exchange,提问作者winfred adrah
相关产品推荐
相关产品推荐

