Это моя форма:
<!DOCTYPE html> <html> <head> </head> <body> <form action="register_ajax.php" method="get"> <input type="text" name="email"> <input type="submit" value="test"> </form> </body> </html>
Это мой php-код:
<?php $dbc = mysqli_connect("localhost","root","*******","continental_tourism") OR die(mysqli_connect_error()); $email = $_GET['email']; $query = "SELECT email FROM customer_info WHERE email = '$email' "; $r = mysqli_query($dbc, $query) OR die(mysqli_error($dbc)); if($r) echo "Email address exists!"; else echo "sss"; ?>
Если я введу правильный (существующий адрес электронной почты на db), то значение $r
истинно. Но если я введу не существующую электронную почту, то также $r
истинно. Почему это? В основном я хочу обнаружить пустой набор. Как мне это сделать?
Благодаря!
$r
будет только false, если возникла ошибка SQL. В противном случае он всегда будет возвращать идентификатор ресурса, даже если никакие строки не будут возвращены оператором SELECT.
Используйте mysqli_num_rows()
для подсчета количества строк. Zero означает, что никто не использует этот адрес электронной почты.
if(mysqli_num_rows($r)) echo "Email address exists!"; else echo "sss";
mysqli_query()
всегда возвращает ресурс результата MySQLi, если запрос был успешным . Ресурс всегда будет оценивать значение TRUE
при тестировании как логическое.
Успешный запрос не обязательно тот, который возвращает результаты, это просто запрос, который не подвел. Запросы считаются неудачными при возникновении ошибки, например, синтаксическая ошибка или ошибка обработки на сервере MySQL – в каком случае они вернут FALSE
. Но запрос, который не находит никаких результатов, по-прежнему является успешным запросом.
Вам нужно использовать mysqli_num_rows()
чтобы определить, нашел ли запрос какие-либо результаты:
<?php $dbc = mysqli_connect("localhost","root","longhorn","continental_tourism") OR die(mysqli_connect_error()); $email = $_GET['email']; $query = "SELECT email FROM customer_info WHERE email = '$email' "; $r = mysqli_query($dbc, $query) OR die(mysqli_error($dbc)); if(mysqli_num_rows($r) > 0) echo "Email address exists!"; else echo "sss"; ?>
mysqli_query
вернет объект результата с успехом и false
при mysqli_query
. Никакие выбранные строки не считаются ошибками. Вы можете использовать mysqli_num_rows
для проверки количества возвращаемых строк.