这看起来很简单,但由于某些原因我无法让它工作......我需要我能得到的所有帮助
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/