我正在尝试通过PHP验证注册表单,并使用准备好的语句和绑定参数,如下所示:
$email = $_POST['email'];
$password = $_POST['password'];
$selectStatement = "SELECT id FROM users WHERE email = ? ";
$stmts = mysqli_prepare($dbc, $selectStatement);
mysqli_stmt_bind_param($stmts,'s', $email);
mysqli_stmt_execute($stmts);
$count = mysqli_stmt_num_rows($stmts);
if (!$stmts){
die('mysqli error: '.mysqli_error($dbc));
}
while($row = mysqli_stmt_fetch($stmts)){
if($row != null){
echo('User already registered!');
}
}else{
$insertQuery = "INSERT INTO users(email, password) VALUES(?, ?)";
$stmtI = mysqli_prepare($dbc, $insertQuery);
mysqli_stmt_bind_param($stmtI, "ss", $email, $password);
mysqli_stmt_execute($stmtI);
echo('Registration completed!');
}
}
mysqli_stmt_close($stmts);
mysqli_stmt_close($stmtI);
mysqli_close($dbc);
但是,当在数据库中找不到用户时,它应该进入else分支,但是,显然它没有到达那里,甚至在while循环中也没有。我究竟做错了什么?
答案 0 :(得分:2)
仅当从数据库(mysqli_stmt_fetch($ stmts))中找到记录时执行循环
您必须像这样更改代码
$email = $_POST['email'];
$password = $_POST['password']; $selectStatement = "SELECT id FROM users WHERE email = ? ";
$stmts = mysqli_prepare($dbc, $selectStatement);
mysqli_stmt_bind_param($stmts,'s', $email);
mysqli_stmt_execute($stmts);
$count = mysqli_stmt_num_rows($stmts);
if (!$stmts){ die('mysqli error: '.mysqli_error($dbc));
}
if($count){
echo('User already registered!');
}else{
$insertQuery = "INSERT INTO users(email, password) VALUES(?, ?)";
$stmtI = mysqli_prepare($dbc, $insertQuery);
mysqli_stmt_bind_param($stmtI, "ss", $email, $password);
mysqli_stmt_execute($stmtI);
echo('Registration completed!');
}
答案 1 :(得分:-1)
您的代码有误...
}
}else{
只写
}else{
尝试
$email = $_POST['email'];
$password = $_POST['password'];
$selectStatement = "SELECT id FROM users WHERE email = ? ";
$stmts = mysqli_prepare($dbc, $selectStatement);
mysqli_stmt_bind_param($stmts,'s', $email);
mysqli_stmt_execute($stmts);
$count = mysqli_stmt_num_rows($stmts);
if (!$stmts){
die('mysqli error: '.mysqli_error($dbc));
}
while($row = mysqli_stmt_fetch($stmts)){
if($count == 1){
echo('User already registered!');
}else{
$insertQuery = "INSERT INTO users(email, password) VALUES(?, ?)";
$stmtI = mysqli_prepare($dbc, $insertQuery);
mysqli_stmt_bind_param($stmtI, "ss", $email, $password);
mysqli_stmt_execute($stmtI);
echo('Registration completed!');
}
}
mysqli_stmt_close($stmts);
mysqli_stmt_close($stmtI);
mysqli_close($dbc);