Как проверить на наличие записи в БД

Нужно перед добавления пользователя в базу данных проверить на уникальность логин пользователя. Код работает, но как заносил пользователей с одинаковыми логинами, так и продолжает это делать. В чем ошибка?

$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 шт):

Автор решения: Jaikrexe

По-моему, проблема в строчке

$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,они предоставляют объектно ориентированный интерфейс для работы с базами данных. И предоставляют много вспомогательных функций.

→ Ссылка