带有绑定的PHP选择语句

时间:2018-06-24 19:46:38

标签: 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循环中也没有。我究竟做错了什么?

2 个答案:

答案 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);