首页 > 解决方案 > 致命错误:未捕获的 PDOException:SQLSTATE[HY093]:无效参数号:未绑定参数

问题描述

我有一个问题两天没能解决。我是 PDO 的新手。这是我得到的错误:

Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: no parameters were bound in C:\xampp\htdocs\karton_ljubimca\admin\dist\includes\connection.php:38 Stack trace: #0 C:\xampp\htdocs\karton_ljubimca\admin\dist\includes\connection.php(38): PDOStatement->execute() #1 C:\xampp\htdocs\karton_ljubimca\admin\dist\forgotten_password.php(42): Connection->execute() #2 {main} thrown in C:\xampp\htdocs\karton_ljubimca\admin\dist\includes\connection.php on line 38

我的代码来自 forget_password.php:

    $rec_email = $_POST['recovery_email'];
    $token = bin2hex(random_bytes(20));
    $user_role = $_SESSION['user_role'];

    if ($_SESSION['user_role'] == 'vlasnik') {
        $column = 'email_vlasnika';
    }
    if ($_SESSION['user_role'] == 'veterinarska_ustanova') {
        $column = 'email_vet_ustanove';
    }
    if ($_SESSION['user_role'] == 'admin') {
        $column = 'email_admina';
    }

    $sql = "UPDATE :user_role SET reset_password_token = :reset_password_token WHERE :column = email";

    $conn->bind_value(':user_role', $user_role, PDO::PARAM_STR);
    $conn->bind_value(':reset_password_token', $token, PDO::PARAM_STR);
    $conn->bind_value(':column', $column, PDO::PARAM_STR);
    $conn->bind_value(':email', $rec_email, PDO::PARAM_STR);

    $conn->query_prepare($sql);
    $conn->execute();

这是来自 Connection 类的 bind_value() 方法:

public function bind_value($param, $value, $type) {
        return $this->stmt->bindValue($param, $value, $type);
    }

你能解释一下我做错了什么吗?


更新: 将代码更改为:

$sql = "UPDATE ".$user_role." SET reset_password_token = :reset_password_token WHERE " . $column . " = :email";
$conn->query_prepare($sql);
$conn->bind_value(':reset_password_token', $token, PDO::PARAM_STR);
$conn->bind_value(':email', $rec_email, PDO::PARAM_STR);
$conn->execute();

它正在工作。谢谢大家

标签: phpmysqlpdo

解决方案


推荐阅读