Ошибка php: SQLSTATE [HY093]: неверный номер параметра: параметр не был определен - PullRequest
0 голосов
/ 11 февраля 2019

Я делаю API для моего проекта с php и mssql (sql server).Я написал этот код, но он дает мне ошибки.Я проверил параметры и значения, но я не вижу проблемы.любая помощь будет оценена.Ошибка заключается в следующем: SQLSTATE [HY093]: недопустимый номер параметра: параметр не был определен в C: \ wamp \ www \ sarfeh \ api \ objects \ user.php в строке 40. Я выделил строку 40 в этом коде ниже.И вот что имеет $ hash: $ 2y $ 10 $ BTog4ZdjkrDsH9Hw / FjuD.myHiz61o6SOUDy4KuvoB2dGDQV9Vl4u

EDIT: Если я передаю пароль без хеширования (11111), это работает, но я,получить ошибку.

функция create () {

    /
    // insert query
    $query = "INSERT INTO " . $this->table_name . "
    (first_name,last_name,phone,password_hash)
    values (:first_name,:last_name,:phone,':password')";

    /$this->first_name="arassssh2";
    $this->last_name="arasssh2";
    $this->phone="326981";
    $this->password="111111";
    // prepare the query
    $stmt = $this->conn->prepare($query);
    // bind the values
    $stmt->bindParam(':first_name', $this->first_name, PDO::PARAM_STR);
    $stmt->bindParam(':last_name', $this->last_name, PDO::PARAM_STR);
    $stmt->bindParam(':phone', $this->phone, PDO::PARAM_STR);
    $hash = password_hash($this->password, PASSWORD_BCRYPT);
    $stmt->bindParam(':password', $hash); //line 40


    // execute the query, also check if query was successful
    if($stmt->execute()){
        return true;
    }

    return false;

}

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Вам не нужно окружать имя вашего параметра '.Удалить ' до и после :password.Измените

$query = "INSERT INTO " . $this->table_name . "
    (first_name,last_name,phone,password_hash)
    values (:first_name,:last_name,:phone,':password')
"; 

на

 $query = "INSERT INTO " . $this->table_name . "
    (first_name,last_name,phone,password_hash)
    values (:first_name,:last_name,:phone,:password)
";
0 голосов
/ 11 февраля 2019

Я считаю, line 40 должно быть:

 $stmt->bindParam(':password', $hash, PDO::PARAM_STR);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...