Как проверить на наличие записи в БД
Нужно перед добавления пользователя в базу данных проверить на уникальность логин пользователя. Код работает, но как заносил пользователей с одинаковыми логинами, так и продолжает это делать. В чем ошибка?
$login = filter_var(trim($_POST['login']),FILTER_SANITIZE_STRING);
$pass1 = filter_var(trim($_POST['password1']),FILTER_SANITIZE_STRING);
$pass2 = filter_var(trim($_POST['password2']),FILTER_SANITIZE_STRING);
if($pass1 != $pass2) {
echo "Пароли не совпадают";
}
$mysql = new mysqli('localhost','root','','popkornimage');
$result = mysqli_query("SELECT `login` FROM `user` WHERE `login` = '$login'");
if(mysqli_num_rows($result) > 0) {
echo "Пользователь с таким логином уже существует";
} else {
$mysql->query("INSERT INTO `user`(`login`, `password`) VALUE('$login', '$pass2')");
$mysql->close();
header("Location: /");
}
Ответы (1 шт):
По-моему, проблема в строчке
$result = mysqli_query("SELECT `login` FROM `user` WHERE `login` = '$login'");
Тут у вас каждый раз подставляется "$login" вместо значения переменной, а так как такого пользователя в базе данных нет, она каждый раз возвращает 0 результатов.
Исправить можно добавить конкатенацию в строку запроса:
$result = mysqli_query("SELECT `login` FROM `user` WHERE `login` = '". $login . "'");
Но это не самое лучшее решение. Для того что бы обеспечить максимальную безопасность и удобство в разработке лучше всего использовать ОРМ такие, как Doctrine ORM, или Eloquent ORM,они предоставляют объектно ориентированный интерфейс для работы с базами данных. И предоставляют много вспомогательных функций.