【问题标题】:How to make searching more sensitive in Codeigniter [duplicate]如何在 Codeigniter 中使搜索更敏感 [重复]
【发布时间】:2020-11-12 20:17:00
【问题描述】:

我需要在数据库中的搜索更敏感,并识别大小写之间的区别,如密码。

型号

function checker(){
    $this->db->select('*');
    $this->db->from('gift_cards');
    
    $this->db->join('gift_partners', 'gift_partners.gp_id = gift_cards.gift_part_id');
    if(isset($_POST["redeem"])){
        $redeemvalue=$this->input->post("redeem");
        $this->db->where('gift_id',$redeemvalue);
    }else{
    $this->db->where('gift_code',$this->input->post('gift_code'));
    $this->db->where('gift_part_id',$this->input->post('partner'));
    }
    
    $data=$this->db->get();
    if ($data->num_rows() > 0) {
        
        foreach ($data->result_array() as $row) {
                $dt[] = $row;
                
            }
        return $dt;
    }else{
        
        return false;
    }
}

我需要更敏感的礼品代码,我使用了 WHERE 条件,但如果我用大写或小写搜索返回相同的结果。

$this->db->where('gift_code',$this->input->post('gift_code'));

【问题讨论】:

  • 您使用的是哪个数据库? gift_code 列的类型是什么?
  • @Vickel MySQL,列类型为varchar
  • “Like passwords”听起来很奇怪 - 您是否未加密存储它们?
  • 我刚刚检查了 myAdmin,列 gift_code 设置为:varchar(128),排序规则:latin1_bin:WHERE 查询绝对区分大小写!
  • @Vickel 谢谢。

标签: mysql codeigniter


【解决方案1】:

MySQL 在比较字符时不区分大小写,但可以使用键“BINARY”使其区分大小写。

$this->db->where('BINARY gift_code',$this->input->post('gift_code'));

上面的代码不起作用。您需要使用 SQL 来获得所需的结果。

function checker(){
    $rawSql = "SELECT * FROM gift_cards JOIN ON gift_partners.gp_id = gift_cards.gift_part_id";

    if(isset($_POST["redeem"])){
        $redeemvalue=$this->input->post("redeem");
    
        $rawSql.=" WHERE gift_id=?";    
        $query = $this->db->query($rawSql, [$redeemvalue]);
        
    }else{
        $redeemvalue=$this->input->post("redeem");
    
        // Case Sensitive Query
        $rawSql.=" WHERE BINARY gift_code=? AND gift_part_id=?";    
        $query = $this->db->query($rawSql, [
                                        $this->input->post('gift_code'),
                                        $this->input->post('partner'))
                                        ]);
    
    }
    
    if ($query->num_rows() > 0) {
        
        foreach ($query->result_array() as $row) {
                $dt[] = $row;
                
            }
        return $dt;
    }else{
        
        return false;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 2011-11-22
    • 1970-01-01
    • 2019-03-21
    相关资源
    最近更新 更多