@Soolberns

Не передает переменную в запрос?

Есть функция:
function regis():bool
{
    global $pdo;
    $login = $_POST['login'];
    $pass = $_POST['pass'];

    if (empty($login) || empty($pass)) {
        $_SESSION['errors'] = "Все поля должны быть заполнены!";
        return false;
    }

    $pass = password_hash($pass, PASSWORD_DEFAULT);
    $res = $pdo->prepare("INSERT INTO users(login, password) VALUES (?,?)");
    if ($res->execute([$login, $pass])) {
        $_SESSION['success'] = 'Успешная регистрация';
        return true;
    } else {
        $_SESSION['errors'] = 'Ошибка регистрации';
        return false;
    }
}


Хочу в
$res = $pdo->prepare("INSERT INTO users(login, password) VALUES (?,?)");
заменить вопросы переменными:
$res = $pdo->prepare("INSERT INTO users(login, password) VALUES ($login,$pass)");


Выдает ошибку:
Invalid parameter number: number of bound variables does not match number of tokens in


Что делать?
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Я думаю, имелось в виду что-то вроде этого
function regis($pdo, $login, $pass ): bool
{
    $res = $pdo->prepare("INSERT INTO users(login, password) VALUES (:login,:pass)");
    $res->execute(["login" => $login, "pass" => $pass]);
    return true;
}


На будущее: функция должна всегда делать что-то одно. Все проверки, работа с НТТР, сессии - должно быть снаружи.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы