php错误:SQLSTATE [HY093]:无效的参数号:未定义参数

时间:2019-02-11 07:21:03

标签: php sql-server pdo

我正在使用php和mssql(sql服务器)为我的项目制作API。我写了这段代码,但是它给了我错误的印象。我已经检查了参数和值,但看不到问题。任何帮助,将不胜感激。 错误是这样的:SQLSTATE [HY093]:无效的参数编号:在第40行的C:\ wamp \ www \ sarfeh \ api \ objects \ user.php中未定义参数 我在下面的代码中标记了第40行。 回答:这是$ hash的内容:$ 2y $ 10 $ BTog4ZdjkrDsH9Hw / FjuD.myHiz61o6SOUDy4KuvoB2dGDQV9Vl4u

编辑: 如果我在不进行散列的情况下通过密码(11111),则可以正常工作,但是在进行散列时会出现错误。

function 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 :(得分:2)

您不需要用'括住参数名称。在'之前和之后删除: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)
";

答案 1 :(得分:1)

我相信line 40应该是:

 $stmt->bindParam(':password', $hash, PDO::PARAM_STR);