CodeIgniter创建一个准备好的语句或使用活动记录进行concat搜索

wgeznvg7  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(81)

我想知道如何使用我的这个搜索查询来防止SQL注入?不幸的是,我不得不使用字符串,因为我需要连接的名字和姓氏搜索。我试过准备好的声明,但它们似乎在这里也不起作用。
我的功能

public function admin_search($input,$limit,$start){
        $sql = "SELECT * FROM agent_accounts as aa LEFT JOIN person as p ON aa.person_id = p.id "
                . "WHERE CONCAT_WS('', p.first_name, p.last_name) LIKE '%$input%' "
                . "OR p.email LIKE '%$input%' OR p.phone_number LIKE '%$input%' "
                . "OR aa.account_number LIKE '%$input%' LIMIT $limit OFFSET $start";
        $query = $this->db->query($sql);
        if($query->num_rows()>0){
            foreach($query->result()as $row){
                $documents[] = $row;
            }
            return $documents;
        }else{
            return false;
        }
    }

字符串

2hh7jdfx

2hh7jdfx1#

Codeigniter活动记录自动转义查询以防止SQL注入
像这样

$query = $this->db->get_where('table_name', array('id' => $id), $limit, $offset);

字符串
但如果使用查询同级
试试这个:

$sql = "SELECT * FROM agent_accounts as aa LEFT JOIN person as p ON aa.person_id = p.id "
                . "WHERE CONCAT_WS('', p.first_name, p.last_name) LIKE ? "
                . "OR p.email LIKE ? OR p.phone_number LIKE ? "
                . "OR aa.account_number LIKE ? LIMIT ? OFFSET ?";
        $query = $this->db->query($sql,array('%{$input}%','%{$input}%','%{$input}%','%{$input}%',$limit,$start));


查询中的问号将自动替换为数组中的值。

相关问题