我已经搜索了每个答案,但没有任何内容描述了我想要的东西,或者也许我没有完全正确地理解它们。这是我的问题。我想要一个像这样的“复杂”查询:
select * from MyTable
where PropertyA='$propertyValue'
and (id like '%$someValue%' or name like '%$someValue%' or description like '%$someValue%')
order by id desc limit 10 offset $offsetValue
如何在代码点火器中编写此查询?
$propertyValue, $someValue, $offsetValue
都是php变量。当然我需要避免sql注入。我还在 phpmyadmin 中对此进行了测试,我的查询工作正常。
对于 SQL 注入,使用绑定查询和活动记录是安全的,它可以让您免于 SQL 注入,因为框架会完成转义易受攻击的用户输入的所有工作。
您只需在 3.X 版本的 Active record 中编写代码
$this->db->select('*');
$this->db->where('PropertyA', $propertyValue);
$this->db->group_start();
$this->db->like('id', $someValue);
$this->db->or_like('name', $someValue);
$this->db->or_like('description', $someValue);
$this->db->group_end();
$this->db->order('id','desc')
$this->db->limit($limit, $start);// add your limit here
$this->db->get('MyTable');
select('*')
可以安全地省略,因为默认的 SELECT 子句是 SELECT *
。where()
、from()
、limit()
和 offset()
方法调用都可以组合成 get_where()
调用。group_start()
和 group_end()
封装 OR LIKE 条件逻辑。or_like()
可以在其第一个参数中接收关联数组(只需记住键不能重复)。id
可能是这样。return $this->db
->group_start()
->or_like(['id' => $someValue, 'name' => $someValue, 'description' => $someValue])
->group_end();
->order('id', 'DESC')
->get_where('MyTable', ['PropertyA' => $propertyValue], $limit, $offset)
->result();