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

PHP报错:Cannot use object of type mysqli_result as array 求助

问题原因分析

你遇到的这个致命错误,核心问题出在把mysqli_result查询结果对象当成普通数组来操作了。看你代码里的这段逻辑:

$location_result=$conn->query($all_location);
while($row=mysqli_fetch_assoc($location_result)){ 
  $location_result[] = $row['pg_address']; // 这里是错误根源!
}

$location_result是query()方法返回的结果集对象,它不是普通的PHP数组,你不能直接用[]语法往里面追加元素——这就触发了"Cannot use object of type mysqli_result as array"的错误。

修正方案

你需要新建一个独立的数组来存储循环中取出的地址数据,不能复用结果集对象。另外还要注意:你当前直接把用户提交的POST值拼进SQL语句的做法存在严重的SQL注入风险,建议改用预处理语句来规避这个安全问题。

修正后的完整代码如下:

if(isset($_POST['list'])){ 
    // 处理POST提交的值
    $location_type = trim($_POST['list']);
    $arr = explode(' ', $location_type);
    $listing = $arr[0];

    // 使用预处理语句避免SQL注入
    $all_location = "select * from tbl_master_property where pg_address like ?";
    // 拼接LIKE查询需要的通配符
    $search_term = "%{$listing}%";
    
    // 初始化预处理语句并绑定参数
    $stmt = $conn->prepare($all_location);
    $stmt->bind_param("s", $search_term); // 绑定字符串类型的参数
    $stmt->execute();
    $location_result = $stmt->get_result();

    // 新建数组存储查询到的地址
    $address_list = [];
    while($row = mysqli_fetch_assoc($location_result)){ 
        $address_list[] = $row['pg_address'];
    }

    echo "<pre>";
    print_r($address_list);
    die;
}
额外注意事项
  1. SQL注入防护:直接拼接用户输入到SQL语句中,恶意用户可以构造特殊输入篡改SQL逻辑,甚至删除数据库表。预处理语句通过参数绑定把用户输入作为纯数据处理,彻底避免了这个风险。
  2. 代码健壮性:可以增加对$location_type的非空校验,比如如果用户提交了空值,直接跳过查询;另外如果$arr为空(比如用户提交的内容全是空格),也要做容错处理,避免$arr[0]报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:11:43