Проверка, существует ли имя пользователя уже в подготовленной инструкции db

#php #mysql #mysqli

#php #mysql #mysqli

Вопрос:

Я пытаюсь проверить, существует ли опубликованное имя пользователя уже в моей базе данных. Я не уверен, где я ошибаюсь. Другие условия, приведенные ниже, работают правильно. Когда я отправляю форму, я всегда получаю «Имя пользователя занято», даже если такого имени не существует в моей базе данных. Любая помощь была бы высоко оценена. Спасибо!

 $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:

selec count(*) ... всегда возвращает 1 запись с количеством. Итак, когда вы проверяете else if($stmt->num_rows > 0) , он всегда возвращает true. Вы должны проверять значение, возвращаемое count, а не количество записей.

Комментарии:

1. Спасибо, все заработало! Не понял, что count всегда возвращает 1 запись.

2. Если это решило вашу проблему, пожалуйста, подумайте о том, чтобы отметить это как ответ — meta.stackexchange.com/questions/5234 /…