如何在mysqli prepare语句查询

时间:2015-06-14 16:29:24

标签: php mysql mysqli prepared-statement

我是mysqli准备声明的新手,很惊讶地找到了||在mysqli prepare语句查询中没有按预期工作。 我有一个函数检查用户是否注册,其评估应该基于唯一的行ID和电子邮件地址。此外,由于id列和电子邮件列的类型不同,Int(11)和{分别为{1}},所以我认为使用VARCHAR会遇到一些问题,因为数据类型不同

bind_param

这样做的正确方法是什么,我是否必须使用单独的功能?

2 个答案:

答案 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;
        }
    }
}

}