我是mysqli准备声明的新手,很惊讶地找到了||在mysqli prepare语句查询中没有按预期工作。
我有一个函数检查用户是否注册,其评估应该基于唯一的行ID和电子邮件地址。此外,由于id列和电子邮件列的类型不同,Int(11)
和{分别为{1}},所以我认为使用VARCHAR
会遇到一些问题,因为数据类型不同
bind_param
这样做的正确方法是什么,我是否必须使用单独的功能?
答案 0 :(得分:2)
你需要绑定两个这样的参数:
$stmt->bind_param('si',$iden, $iden);
因为你设置了两个'?'。
s表示字符串,i表示整数,b表示blob,d表示双精度。
答案 1 :(得分:0)
问题是您已在prepare语句中指定要绑定两个值。但是在bindValue语句中,您只绑定一个值。还有问题,$ iden可以是电子邮件或号码,那么我认为最好的方法是为它们生成条件语句。所以,如果我是你,我会选择:
public function checkUserRegistered($iden){
//making sure $iden is not empty
if ($iden) {
//if $iden is a number is equal to id
if (is_numeric($iden)) {
$stmt = $this->connection->prepare("SELECT `id` FROM `$this->table_name` WHERE `id`= ? LIMIT 1 ");
$stmt->bind_param('i',$iden); //because id is an integer
} else {
//then $iden is a varchar which is the email
$stmt = $this->connection->prepare("SELECT `id` FROM `$this->table_name` WHERE `email`= ? LIMIT 1 ");
$stmt->bind_param('s',$iden); //because email is a string
}
if ($stmt->execute()) {
$result = $stmt->get_result();
if($result->num_rows ==1){
$stmt->close();
return true;
}else{
return false;
}
}
}
}