2016-09-06 76 views
-3

我想检查用户名是否已经存在于我的注册页面的数据库中,为此我想我可以用输入的用户名执行一个选择查询并查看有多少结果I回来。但是,num_rows总是= -1我使用的测试用户名在数据库中是两次,所以当我输入它时,它应该转到else并打印“此用户已存在”。我对mysqli也很陌生,所以如果你看到任何错误,你的反馈将不胜感激。OO MYSQLI num_rows always = -1

我的PHP是在这里:

  <?php 
      if(isset($_POST['submit'])){ 
        $connection = new mysqli("localhost","username","password","DB"); 
        if($connection->connect_errno){ 
          echo "Failed to connecto MYSQL: (" . $connection->connect_errno . ") " . $connection-> connect_error; 
        } 
        else{ 
          $username = $_POST['username']; 
          $password = $_POST['password']; 
          $password = password_hash($password, PASSWORD_DEFAULT); 
          $check_exist = $connection->prepare("SELECT username FROM users WHERE username = ?"); 
          $check_exist->bind_param('s', $username); 
          $username = $connection->real_escape_string($username); 
          $check_exist->execute(); 
          $check_exist->store_result(); 
          $numRows = $check_exist->num_rows(); 
          if($numRows = -1){ 
            echo "$numRows"; 
            $enter_user = $connection->prepare("INSERT INTO users (username, password) VALUES (?,?)"); 
            $enter_user->bind_param('ss', $username, $password); 
            $enter_user->execute(); 
            $enter_user->store_result(); 
            $check_exist->close(); 
            $enter_user->close(); 
            $connection->close(); 
          } 
          else{ 
            echo "This user already exists."; 
            $check_exist->close(); 
            $connection->close(); 
          } 
        } 
      } 
      ?> 

很抱歉的格式,我有点新在这里...

+3

'$ numRows = -1' < - 您总是将$ numRows赋值为-1 –

+1

您应该在'users'表中为'username'列添加'UNIQUE'约束。在插入之前依靠'SELECT'留下一个微小的窗口以插入重复记录。这可能会导致严重的安全问题。 – Chris

+0

@JohnConde因此我将它从=改为==,现在它总是默认为Else ...即使用户不存在。 – Doncho

回答

0

行 “如果($ = numRows行-1){” 意味着你想要编码“if($ numRows == -1){”并且这将$ numRows值设置为-1。

您可以使用“if(!$ numRows){”。