Вопрос:
У меня есть пользователь, который вводит желаемое имя, а затем проверяйте базу данных, чтобы узнать, существует ли она до того, как я это сделаю. Это не работает должным образом, хотя, иногда это эхо правильно, иногда нет.
$makeName = $_POST[«userName»]; $nameFind = «SELECT userName FROM usertable WHERE userName = $makeName»; $nameCompare = mysqli_query($con, $nameFind); if($nameCompare == false) { echo «This is a new name»; } else { echo «Pick a new name please»; } Лучший ответ:
Запрос не сбой только потому, что он не возвращает строк. Используйте mysqli_num_rows() чтобы узнать, было ли совпадение или нет.
Также xkcd
Ответ №1
Не делай так.
Вместо,
- Создайте уникальное ограничение для столбца “имя пользователя”.
- Введите нужное имя пользователя.
- Ловушка ошибка, когда желаемое имя уже существует.
Зачем? Ваш подход всегда требует двух обращений к базе данных, и он не учитывает ошибки. И вам все равно придется ловить ошибки; есть много вещей, которые могут пойти не так с выражением вставки.
Ответ №2
Используйте кавычки и избегайте:
«select userName FROM usertable WHERE userName = ‘». mysqli_real_escape_string($makeName). «‘»
И затем используйте mysqli_num_rows()
$result = mysqli_query($query); $num_rows = mysqli_num_rows($result);
Ответ №3if(mysqli_num_rows($nameCompare)) { echo «Pick a new name please»; } else { echo «This is a new name»; }
это проверит результат, если есть строка, она уже используется.
Ответ №4
Вам нужны два запроса для этого в любом случае
$username = mysqli_real_escape_string($con,$username); $query = «SELECT * FROM tbl_login WHERE username=’$username'»; $result = mysqli_query($con,$query)or die(mysqli_error()); $num_row = mysqli_num_rows($result); $row=mysqli_fetch_array($result); if( $num_row ==1 ) { echo ‘false’; } else{ $query_insert = «INSERT INTO login (username, password)VALUES (‘$username’,’$password’);»; $result = mysqli_query($con,$query_insert) or die(mysqli_error()); }