Php PDOStatement::execute():SQLSTATE[HY093]:参数编号无效:绑定变量的编号不匹配

Php PDOStatement::execute():SQLSTATE[HY093]:参数编号无效:绑定变量的编号不匹配,php,function,Php,Function,我想知道这个错误我怎样才能解决这个错误?检查我的代码,这里是函数 以下是我正在使用的代码: 第一个是创建函数,第二个是错误检查,我如何进一步了解此错误请帮助我解决此问题 function create(){ $this->created=date('Y-m-d H:i:s'); // insert query $query = "INSERT INTO " . $this->table_name . " SET un

我想知道这个错误我怎样才能解决这个错误?检查我的代码,这里是函数

以下是我正在使用的代码: 第一个是创建函数,第二个是错误检查,我如何进一步了解此错误请帮助我解决此问题

function create(){

    $this->created=date('Y-m-d H:i:s');

    // insert query
    $query = "INSERT INTO " . $this->table_name . "
            SET
        uname = :uname,
        email = :email,
        contact_number = :contact_number,
        password = :password,
        access_level = :access_level,
        access_code = :access_code,
        status = :status,
        created = :created";


    $stmt = $this->conn->prepare($query);


    $this->uname=htmlspecialchars(strip_tags($this->uname));
    $this->email=htmlspecialchars(strip_tags($this->email));
    $this->contact_number=htmlspecialchars(strip_tags($this->contact_number));
    $this->password=htmlspecialchars(strip_tags($this->password));
    $this->access_level=htmlspecialchars(strip_tags($this->access_level));
    $this->access_code=htmlspecialchars(strip_tags($this->access_code));
    $this->status=htmlspecialchars(strip_tags($this->status));


    $stmt->bindParam(':uname', $this->uname);
    $stmt->bindParam(':lastname', $this->lastname);
    $stmt->bindParam(':email', $this->email);
    $stmt->bindParam(':contact_number', $this->contact_number);


    $password_hash = password_hash($this->password, PASSWORD_BCRYPT);
    $stmt->bindParam(':password', $password_hash);

    $stmt->bindParam(':access_level', $this->access_level);
    $stmt->bindParam(':access_code', $this->access_code);
    $stmt->bindParam(':status', $this->status);
    $stmt->bindParam(':created', $this->created);

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

您正在绑定SQL中不存在的参数:

$stmt->bindParam(':lastname', $this->lastname);

正如错误明确指出的SQLSTATE[HY093]:参数编号无效:绑定变量的编号不匹配

您正在绑定SQL查询中不存在的参数lastname

$stmt->bindParam(':lastname', $this->lastname);

删除这一行

正如其他答案中所指出的,您正在绑定SQL中不存在的参数

$stmt->bindParam(':lastname', $this->lastname);
如果删除这一行,应该可以解决一个问题。 另一个原因是您正在使用可疑的SQL语法作为MySQL扩展, 据我所知,插入SQL的标准语法是

INSERT INTO table (x, y, z) VALUES (0, 1, 2);
而不是

INSERT INTO table SET x=0, y=1, z=2;

我希望这会有所帮助。

您正在将一个额外的参数lastname绑定到准备好的语句中。为了更好地处理错误,请使用catch blocks.P.S。在密码字段上运行htmlspecialcharsstrip_标记是不合适的。我希望密码永远不会显示在屏幕上!因此,应该没有必要扫描它的问题标签或HTML。您在这里所做的一切就是使散列后的最终密码可能与用户输入的密码不同,例如,如果他们使用了类似的字符。这可能意味着用户不理解他们为什么不能登录。补充说明:查看可疑语法。它是标准的,而且可读性更高,因为您不会那么容易混淆值的数量