You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP Warning报错咨询:array_push()参数类型错误代码排查

PHP报错排查与修复

报错原因

PHP Warning: array_push() expects parameter 1 to be array, string given in

这个警告的核心问题是:调用array_push()时,第一个参数$key_count[0]并非数组类型,而是$wpdb->get_var()返回的数值/字符串(许可证统计数量),而array_push()要求第一个参数必须是数组,因此触发类型不匹配错误。

代码中的具体问题

  1. 类型错误:
    第一次循环时,$i=0,$key_count[0]被赋值为SQL查询返回的统计数值,随后尝试用array_push($key_count[0], ...)向这个数值中添加元素,直接违反array_push()的参数要求。
  2. 逻辑混乱:
    赋值后$i自增为1,此时$key_count[1]尚未定义就被传入array_push,会额外触发"未定义索引"警告;同时代码混淆了数组元素和数组本身的操作逻辑,意图表达不清晰。
  3. 安全隐患:
    原代码直接将$product_id拼接进SQL语句,存在SQL注入漏洞。

修复后的代码

global $wpdb;
$key_count = array();

$order_id = $order->get_id();
$order = wc_get_order($order_id);   

foreach( $order->get_items() as $item_id => $item ){
    // 获取产品ID
    $product_id = $item->get_product_id();
    // 预处理SQL并查询未关联订单的许可证数量
    $sql = $wpdb->prepare(
        "SELECT count(license_key) FROM bff_lmfwc_licenses WHERE product_id = %d AND order_id IS NULL",
        $product_id
    );
    $count = $wpdb->get_var($sql);
    // 将结果追加到数组
    $key_count[] = $count;
}

修复说明

  • 移除冗余的$i变量,使用$key_count[] = $count自动向数组追加元素,避免手动维护索引的混乱。
  • 用$wpdb->prepare()预处理SQL语句,通过占位符%d安全传入数值类型的$product_id,彻底规避SQL注入风险。
  • 删除错误的array_push调用,直接收集每个商品对应的许可证数量到数组中,符合常规数据收集逻辑。

内容的提问来源于stack exchange,提问作者xb yang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:36:03