我想知道如何使用此搜索查询阻止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;
}
}
答案 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));
查询中的问号会自动替换为数组中的值。