PHP注册登录功能调用mysqli_stmt_get_result()未定义报错怎么修复
错误原因
mysqli_stmt_get_result() 是PHP MySQL Native Driver(简称mysqlnd)提供的专属函数,你的服务器当前PHP环境未启用mysqlnd扩展,因此调用该函数会触发未定义错误。
修复方案
提供两种可选方案,根据你对服务器的控制权限选择即可:
方案1:启用mysqlnd扩展(有服务器管理权限时首选)
- 如果你使用面板类工具(宝塔、cPanel等),直接进入PHP管理的扩展页,找到
mysqlnd/nd_mysqli扩展勾选启用,重启PHP后即可生效,原有代码无需修改。 - 如果你是自行编译PHP,编译参数中添加
--with-mysqli=mysqlnd重新编译安装即可。
方案2:改写代码兼容现有环境(无服务器权限时首选)
无需修改服务器配置,直接替换uidExists函数的代码即可,替换后逻辑完全和原来一致:
function uidExists($conn, $username, $email){ $sql = "SELECT * FROM users WHERE usersUid = ? OR usersEmail = ?;"; $stmt = mysqli_stmt_init($conn); if (!mysqli_stmt_prepare($stmt, $sql)) { header("location: ../kayitol.php?error=stmtfailed"); exit(); } mysqli_stmt_bind_param($stmt, "ss", $username, $email); mysqli_stmt_execute($stmt); // 替换mysqli_stmt_get_result的逻辑 mysqli_stmt_store_result($stmt); $row = []; // 绑定结果字段,要和你users表的字段顺序、数量完全对应,若表字段不同自行调整即可 mysqli_stmt_bind_result($stmt, $row['usersId'], $row['usersName'], $row['usersEmail'], $row['usersUid'], $row['usersPwd']); if(mysqli_stmt_fetch($stmt)){ mysqli_stmt_close($stmt); return $row; }else{ mysqli_stmt_close($stmt); return false; } }
注意:
mysqli_stmt_bind_result绑定的字段顺序必须和你数据库users表的字段顺序完全一致,如果你的表有其他字段,需要按顺序补充对应的变量到绑定参数里。
额外优化说明
原有代码中mysqli_stmt_close($stmt);写在了return语句之后,属于永远不会执行的死代码,上面的改写方案已经修正了这个问题,避免资源泄漏。
内容的提问来源于stack exchange,提问作者Frrrkn Alksss
相关产品推荐
相关产品推荐

