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

时间:2017-05-31 09:50:16

标签: php mysql codeigniter

我想知道如何使用此搜索查询阻止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;
        }
    }

1 个答案:

答案 0 :(得分:0)

Codeigniter Active记录自动转义查询以防止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));

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