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

PHP代码纠错求助:mysqli_fetch_object使用问题排查

问题分析与修正方案

首先,咱们直接聚焦你定位到的问题行:

echo "id: " . $row['lastname']. "<br>";

错误原因

你通过mysqli_fetch_object($result)把查询结果转换成了对象类型,但访问属性时却误用了数组的键名语法$row['lastname']——PHP会因此抛出类似Cannot use object of type stdClass as array的错误。对象属性的正确访问方式是箭头->语法,而非数组的方括号。

修正方案

两种简单的修复方式,任选其一即可:

方式1:保持对象获取逻辑,改用箭头访问属性

直接修改输出行的属性访问方式:

echo "id: " . $row->lastname . "<br>";

方式2:切换为数组形式获取结果

如果你更习惯数组操作,可以把mysqli_fetch_object替换成mysqli_fetch_assoc,这样就能继续使用$row['lastname']的写法:

while($row = mysqli_fetch_assoc($result)){
    echo "id: " . $row['lastname']. "<br>";
}

额外重要提醒!

你的代码存在严重的SQL注入风险!直接将$_GET['keyboards']拼接进SQL语句,攻击者可以构造恶意参数篡改查询逻辑,甚至破坏数据库。建议立即改用预处理语句修复安全漏洞,示例代码如下:

$keyword = $_GET['keyboards'];
// 初始化预处理语句
$stmt = $conn->prepare("SELECT * FROM MyGuests WHERE lastname LIKE ?");
// 构造模糊匹配的参数
$likeKeyword = "%{$keyword}%";
// 绑定参数("s"表示参数为字符串类型)
$stmt->bind_param("s", $likeKeyword);
$stmt->execute();
$result = $stmt->get_result();

$sss = $result->num_rows;
if($sss) {
    while($row = $result->fetch_object()){
        echo "id: " . $row->lastname . "<br>";
    }
}
// 关闭预处理语句
$stmt->close();

内容的提问来源于stack exchange,提问作者Šarūnas Zu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:09:05