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
相关产品推荐
相关产品推荐

