开发PHP登录注册系统时,运行process-signup.php遇stmt_init()调用错误
解决注册系统中Call to a member function stmt_init() on int错误及相关问题
错误根源分析
你遇到的Fatal error: Uncaught Error: Call to a member function stmt_init() on int是因为$mysqli变量被赋值为int类型(require成功时返回1),而非预期的mysqli连接对象,导致无法调用对象方法。同时代码中还有其他两处问题需要修复:
1. 数据库连接变量传递错误
- 问题:
config.php中创建的连接对象是$conn,但process-signup.php里错误地将require的返回值(成功返回1)赋值给$mysqli,而非获取config.php中定义的连接对象。 - 修复方案:修改
config.php让它返回连接对象,确保process-signup.php能正确获取到mysqli实例:
修复后的config.php:
<?php $conn = new mysqli('localhost','root', '', 'login_db','3306'); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } return $conn; // 返回连接对象供外部使用 ?>
2. SQL预编译参数不匹配
- 问题:SQL语句
INSERT INTO user (username, password) VALUES (?, ?)有2个占位符,但bind_param使用了"sss"(表示3个字符串参数),而实际只传入了2个变量,会导致参数数量不匹配错误。 - 修复方案:将
bind_param的第一个参数改为"ss":
$stmt->bind_param("ss", $_POST["username"], $password_hash);
3. 拼写错误修正
- 问题:最终输出的
Signup successfull存在拼写错误,正确应为Signup successful。
完整修复后的process-signup.php代码
<?php if (empty($_POST["username"])) { die("Username is required"); } if (strlen($_POST["password"]) < 8) { die("Password must be at least 8 characters"); } if (!preg_match("/[a-z]/i", $_POST["password"])) { die("Password must contain at least one letter"); } if (!preg_match("/[0-9]/", $_POST["password"])) { die("Password must contain at least one number"); } if ($_POST["password"] !== $_POST["repassword"]) { die("Passwords must match"); } $password_hash = password_hash($_POST["password"], PASSWORD_DEFAULT); $mysqli = require __DIR__ . "/config.php"; $sql = "INSERT INTO user (username, password) VALUES (?, ?)"; $stmt = $mysqli->stmt_init(); if (!$stmt->prepare($sql)) { die("SQL error: " . $mysqli->error); } $stmt->bind_param("ss", $_POST["username"], $password_hash); // 增加执行结果判断,处理用户名重复等异常 if ($stmt->execute()) { echo "Signup successful"; } else { if ($mysqli->errno === 1062) { die("Username already exists"); } else { die("Signup failed: " . $mysqli->error); } } // 关闭语句和连接 $stmt->close(); $mysqli->close(); ?>
内容的提问来源于stack exchange,提问作者Egitto
相关产品推荐
相关产品推荐

