我正在使用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;
}
答案 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);