php - 异常 'PDOException',消息为“SQLSTATE[HY093] : Invalid parameter number”

标签 php mysql sql pdo

这看起来很简单,但由于某些原因我无法让它工作......我需要我能得到的所有帮助

 function register_user($email, $password,  $gender, $phone_number){
    $this->sql = "insert into user
                  (
                  email_addr, phone_number, password,
                  gender, activation_code, isMobileVerified,
                  last_login_date, unix_sign_up_time, sign_up_date
                  ) VALUES
                  (
                  :email, :phone_number, :password,
                  :gender, :activation_code, :isMoobileVerified,
                  :last_login, :time_unix, NOW()
                  )";
    $this->prepare($this->sql);
    $this->bind(':email', $email);
    $this->bind(':phone_number', $phone_number);
    $this->bind(':password', $password);
    $this->bind(':gender', $gender);
    $this->bind(':activation_code', sha1($password));
    $this->bind(':isMobileVerified', 0);
    $this->bind(':last_login', time());
    $this->bind(':time_unix', time());

    $this->execute();

    return $this->lastInsertedId();
}

当我像这样运行这个函数时

try{
    echo "<br>" . $i->register_user('myMail@register.com', 'password', 'male', '2348020000007');
}catch (PDOException $e) {
    //todo: logging function or mail to dev goes here
    echo $e ."<br>". $e->getMessage();
}

我收到此错误

exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in C:\wamp\www\ecommerce\system\model\class.ecommerce.php:215 Stack trace: #0 C:\wamp\www\ecommerce\system\model\class.ecommerce.php(215): PDOStatement->bindValue(':isMobileVerifi...', true, 5) #1 C:\wamp\www\ecommerce\system\model\class.ecommerce.php(281): ukorJidechi\db_handler->bind(':isMobileVerifi...', true) #2 C:\wamp\www\ecommerce\namespace_test.php(51): ukorJidechi\ecommerce_user->register_user('myMail@register...', 'password', 'male', '2348020000007') #3 {main} SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

这是我的自定义绑定(bind)方法

function bind($placeholder, $value, $type = null){
    if (is_null($type)) {
        switch (true) {
            case is_int($value):
                $type = \PDO::PARAM_INT;
                break;
            case is_bool($value):
                $type = \PDO::PARAM_BOOL;
                break;
            case is_null($value):
                $type = \PDO::PARAM_NULL;
                break;
            default:
                $type = \PDO::PARAM_STR;
        }
    }
    $this->stmt->bindValue($placeholder, $value, $type);
}

有人可以告诉我我做错了什么吗?请。

最佳答案

请参阅此处的声明,

$this->bind(':unix_sign_up_time', time());

并将上面的语句与$this->sql进行比较

$this->sql = "insert into user
              (
              ...
              :last_login, :time_unix, NOW()
                            ^^^^^^^^^
              )";

所以你的 bind() 语句应该是,

$this->bind(':time_unix', time());

已编辑:

$this->sql中查看这一行,

$this->sql = "insert into user
              (
              ...
              :gender, :activation_code, :isMoobileVerified,
                                          ^^^^^^^^^^^^^^^^^^
              ...
              )";

应该是:isMobileVerified

关于php - 异常 'PDOException',消息为“SQLSTATE[HY093] : Invalid parameter number”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39556656/

相关文章:

mysql - 是否可以减少重复的子查询查找?

sql - Rails 4 JOIN GROUP BY 和 SELECT

php - 如何创建语义搜索

javascript - 进行奇特的文件输入时未捕获类型错误

php - 每个用户在 TinyMCE 的 iBrowser 中都有自己的图像文件夹

mysql - 如何使用开始日期和结束日期计算每个月列中的数据数量

mysql - 将新列添加到现有的复合唯一键

sql - GROUP 列的组合,而不是排列

php - PHP和MYSQL登录表单不起作用

php - [PHP + MySQL]数据库SELECT查询未返回结果