如何使用PHP mysqli的bind_param选取数据行?代码异常求助
解决mysqli预处理语句无法获取字段内容的问题
嘿,我一眼就发现问题出在哪啦!你写的预处理代码里,漏掉了从结果集中提取数据行的关键步骤,直接就去调用$row['page'],但$row变量根本没被定义,自然拿不到值。
修正后的完整代码
// 准备预处理语句(建议加上错误检查) $stmt = $db_mysqli->prepare("SELECT * FROM table WHERE id = ?"); if (!$stmt) { die("预处理语句创建失败: " . $db_mysqli->error); } // 绑定参数并执行查询 $stmt->bind_param("s", $id); $stmt->execute(); // 获取结果集,然后提取对应的数据行 $result = $stmt->get_result(); $row = $result->fetch_assoc(); // 这一步是你之前漏掉的核心操作! // 先判断是否找到对应数据,避免报错 if ($row) { $page = $row['page']; echo $page; } else { echo "未找到对应ID的数据"; } // 养成关闭资源的好习惯 $stmt->close(); $result->close();
关键修正点说明
- 执行
$stmt->get_result()后,只是拿到了结果集对象,必须调用fetch_assoc()(或fetch_array()等方法)才能把结果集中的一行数据赋值给$row变量,之后才能访问字段值。 - 增加了错误检查:比如判断预处理语句是否创建成功,防止因为SQL语法错误或数据库连接问题导致后续代码崩溃。
- 增加了数据存在性判断:如果没有找到对应
id的数据,$row会返回null,直接访问$row['page']会触发报错,先判断再使用更稳妥。
内容的提问来源于stack exchange,提问作者mama mongmong
相关产品推荐
相关产品推荐

