【问题标题】:Codeigniter db query clause where not workingCodeigniter db查询子句不起作用
【发布时间】:2018-04-10 04:20:29
【问题描述】:

我建立了一个查询:

 public function getContacts($limit, $start, $search)
{

    $this->db->limit($limit, $start);

    if (!empty($search)) {
        $this->db->like('name', $search);
        $this->db->or_like('last_name', $search);
        $this->db->or_like('phone_number', $search);
        $this->db->or_like('created_at', $search);
        $this->db->or_like('note', $search);
    }



    $query = $this->db->get_where('contact', array('user_id' => 3));

    return $query->result_array();

}

但是 where 子句不起作用。它应该只返回 user_id 等于 3 的结果,但它会返回所有内容。

怎么了?

这是执行的查询:

SELECT * FROM `contact` WHERE name LIKE '%stefano%' ESCAPE '!' OR last_name LIKE '%stefano%' ESCAPE '!' OR phone_number LIKE '%stefano%' ESCAPE '!' OR created_at LIKE '%stefano%' ESCAPE '!' OR note LIKE '%stefano%' ESCAPE '!' AND `user_id` = 3 LIMIT 2

在 Workbench 中尝试了此查询,但仍然忽略 AND user_id = 3。 如果我的逻辑没有错,它应该只返回 user_id = 3 但返回全部的行。

【问题讨论】:

  • ->where 添加到其他所有内容之上怎么样
  • 试过了还是不行
  • 你使用的是哪个版本@StefanoMaglione
  • 3.1.8 是我的版本
  • 奇怪,做$this->db->where('user_id', 3); echo $this->db->get_compiled_select('contact');并分享声明(删除所有包括$query)。

标签: php mysql codeigniter


【解决方案1】:

你需要添加 group_start() 和 group_end()。像这样。

 if (!empty($search)) {
      $this->db->group_start();
        $this->db->like('name', $search);
        $this->db->or_like('last_name', $search);
        $this->db->or_like('phone_number', $search);
        $this->db->or_like('created_at', $search);
        $this->db->or_like('note', $search);
        ->group_end();
    }

【讨论】:

  • 我试图修复您遇到的语法错误,但我猜您已将其还原。如果前一个没有分号(或者我认为),您只能更改 group_end()。
  • *链而不是改变
【解决方案2】:

试试这个

public function getContacts($limit, $start, $search)
{
  $this->db->select('*');
  $this->db->from('contact');
  if (!empty($search)) {
    $this->db->like('name', $search);
    $this->db->or_like('last_name', $search);
    $this->db->or_like('phone_number', $search);
    $this->db->or_like('created_at', $search);
    $this->db->or_like('note', $search);
  }

  $this->db->where(array('user_id' => 3));
  $this->db->limit($limit, $start);
  $query = $this->db->get();
  return $query->result_array();
}

【讨论】:

  • 如何分离语句将改变什么?我不记得在文档中的任何地方读过 get_where() 不能与其他方法一起使用(除了 where)......这就是为什么在你的答案中添加一些上下文通常是个好主意
  • @Alex 实际上get_where()get()where() 的组合
【解决方案3】:

试试这个代码:

public function getContacts($limit, $start, $search)
{

    $this->db->limit($limit, $start);

    if (!empty($search)) {
        $this->db->select(*);
        $this->db->like('name', $search);
        $this->db->or_like('last_name', $search);
        $this->db->or_like('phone_number', $search);
        $this->db->or_like('created_at', $search);
        $this->db->or_like('note', $search);
    }



    $this->db->select(*);
    $this->db->where('user_id','3');
    $query = $this->db->get('tablename');
    return $query->result_array();

}

【讨论】:

    猜你喜欢
    • 2014-01-26
    • 2012-08-18
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 2016-07-24
    相关资源
    最近更新 更多