CodeIgniter Active记录多个"where"和"or"语句

Sta*_*see 8 php codeigniter

我有以下Active Record查询.

//Example 1
public function info($school, $class, $student, $keyword)
{
    $this->db->where('school.id', $school);
    $this->db->where('class.id', $class);
    $this->db->where('student.id', $student);

    $this->db->or_where('school.description', $keyword);
    $this->db->or_where('class.description', $keyword);
    $this->db->or_where('student.description', $keyword); 

    return $this->db->get('info')->result();
}
Run Code Online (Sandbox Code Playgroud)

我想对底部3"or_where"语句进行分组,以便它们包含在前3个"where"语句中.我想出的解决方案是......

//Example 2
public function info($school, $class, $student, $keyword) 
{
    $this->db->where('school.description', $keyword);
    $this->db->where('school.id', $school);
    $this->db->where('class.id', $class);
    $this->db->where('student.id', $student);

    $this->db->or_where('class.description', $keyword);
    $this->db->where('school.id', $school);
    $this->db->where('class.id', $class);
    $this->db->where('student.id', $student);

    $this->db->or_where('student.description', $keyword); 
    $this->db->where('school.id', $school);
    $this->db->where('class.id', $class);
    $this->db->where('student.id', $student);

    return $this->db->get('info')->result();
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但有没有办法在不重复代码的情况下执行此操作?

Sta*_*see 12

我找到了解决方案!

public function info($school, $class, $student, $keyword)
{
    $this->db->where('school.id', $school);
    $this->db->where('class.id', $class);
    $this->db->where('student.id', $student);

    $this->db->where("(school.description LIKE '$keywords' OR class.description LIKE '$keywords' OR student.description LIKE '$keywords')");

    return $this->db->get('info')->result();
}
Run Code Online (Sandbox Code Playgroud)

  • $关键字可能是sql注入,需要首先转义... ex.$这个 - > DB-> escape_like_str($搜索) (2认同)