检查数据库准备好的语句中是否已经存在用户名

时间:2019-04-06 21:19:40

标签: php mysql mysqli

我正在尝试检查数据库中是否已存在发布的用户名。我不确定我要去哪里错。以下其他条件正常运行。当我提交表单时,即使我的数据库中不存在这样的名称,我也总是会收到“ Usernametake”。任何帮助将不胜感激。谢谢!

$username = $_POST['username'];

 $stmt = $mysqli->prepare('SELECT COUNT(*) FROM users WHERE username = ?');

$stmt->bind_param('s', $username);

$stmt->execute();

$stmt->store_result();

 if(isset($_POST["submit"]))
 {

      if(empty($_POST["username"]))
      {
          echo '<script>alert("Username field empty")</script>';

     } else if(empty($_POST["password"])) {
          echo '<script>alert("Password field empty")</script>';

     } else if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
          echo '<script>alert("Incorrect email format")</script>';

     } else if($stmt->num_rows > 0) {
     echo '<script>alert("Username taken")</script>';

1 个答案:

答案 0 :(得分:1)

selec count(*) ...始终返回1条记录以及计数。因此,当您检查else if($stmt->num_rows > 0)时,它总是返回true。您应该检查按计数返回的值,而不是记录数。