带有绑定的 PHP 选择语句



我正在尝试通过 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 循环中也没有。我做错了什么?

while 循环仅在从数据库 (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!');
}

你的代码是错误的...在

}
}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);

最新更新