PHP使用mysqli的fetch()返回布尔值 无法获取查询字段数据如何解决
问题原因
你调用的是mysqli_stmt类的fetch()方法,该方法本身仅用于将查询结果列绑定到预先声明的变量中,返回值只能是布尔值:匹配到结果时返回true,无匹配结果时返回false,不会返回包含查询字段的数组或对象,因此你无法直接通过$row获取password等字段值。
解决方案
你可以选择以下两种常用方案实现字段读取:
方案1:通过
bind_result()绑定变量后读取
该方案不需要额外扩展支持,兼容性最好:if ($query = $db->prepare("SELECT id, name, email, password FROM `users` WHERE email = ?")) { $query->bind_param('s', $email); $query->execute(); // 按SELECT查询的字段顺序绑定对应变量 $query->bind_result($id, $name, $userEmail, $password); // 调用fetch后绑定的变量会被自动赋值 if ($query->fetch()) { // 直接使用绑定后的变量即可 echo '匹配到用户,密码为:' . $password; } else { echo '无匹配结果'; } $query->close(); }方案2:先获取结果集再读取字段
如果你习惯用关联数组/对象读取所有字段,可以先调用get_result()获取结果集对象,再调用对应方法读取字段:if ($query = $db->prepare("SELECT id, name, email, password FROM `users` WHERE email = ?")) { $query->bind_param('s', $email); $query->execute(); // 获取结果集对象,需环境已安装mysqlnd扩展 $result = $query->get_result(); // 读取为关联数组 $row = $result->fetch_assoc(); if ($row) { // 按数组键访问对应字段 echo '匹配到用户,密码为:' . $row['password']; } else { echo '无匹配结果'; } $query->close(); }
注意:
get_result()依赖mysqlnd扩展,绝大多数主流PHP环境默认已开启该扩展,若遇到调用报错可直接使用方案1。
内容的提问来源于stack exchange,提问作者Qristian Pinella
相关产品推荐
相关产品推荐

