Code Igniter - 使用 where 和 like 进行 MySQL 查询

问题描述 投票:0回答:2

我已经搜索了每个答案,但没有任何内容描述了我想要的东西,或者也许我没有完全正确地理解它们。这是我的问题。我想要一个像这样的“复杂”查询:

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 中对此进行了测试,我的查询工作正常。

php mysql codeigniter
2个回答
9
投票

对于 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');

0
投票
  • select('*')
    可以安全地省略,因为默认的 SELECT 子句是
    SELECT *
  • 您的
    where()
    from()
    limit()
    offset()
    方法调用都可以组合成
    get_where()
    调用。
  • 使用
    group_start()
    group_end()
    封装 OR LIKE 条件逻辑。
  • or_like()
    可以在其第一个参数中接收关联数组(只需记住键不能重复)。
  • 注意:对数字列执行 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();
© www.soinside.com 2019 - 2024. All rights reserved.