Codeigniter搜索查询无法正常工作

时间:2012-12-04 20:02:09

标签: php codeigniter

基本上通过显示一个表单,用户可以输入2个变量$ no和$ first但我只能在输入两个字段时显示结果。我需要它才能工作,所以当我输入1变量时,它会显示结果。

我以为我可以使用某种OR语句,但我不确定如何实现它。任何帮助将不胜感激,如果它不够清楚,我会道歉,当涉及到codeigniter时我是相当新的。

控制器

public function query()

{

$no = $this->input->post('no');
$first = $this->input->post('first');
$this->load->model("test");
     $data['query']=$this->test->query($no,$first);
    $this->load->view('query',$data);

}

模型

function query($no, $first)
{

 return $query = $this->db->get_where('table', array('no' => $no,
 'first' => $first ))->result();

}

查看

 <?php foreach($query as $row): ?>
<tr> 
<td><?php echo $row->no; ?></td>
<td><?php echo $row->date; ?></td>
<td><?php echo $row->first; ?></td>


</tr>
<?php endforeach; ?>

3 个答案:

答案 0 :(得分:1)

您可以尝试先准备where子句

function query($no = "", $first = "")
{
 $response = array();
 if($first != "" || $no != ""){
  $where = "";
  if($no == "") $where = 'first = '.$first;
  if($first == "") $where = 'no = '.$no;
  if($first != "" && $no != "") $where = 'no = '.$no.' AND first = '.$first;
  $fetch = $this->db->where($where)->from('table')->get();
  if($fetch->num_rows() > 0) $response = $fetch->result_array();
 }
 return $response;
}

希望我能得到你想要的主意。

答案 1 :(得分:0)

您需要将WHERE个参数分开:

function query($no, $first)
{
     $this->db->select();
     $this->db->from('table');
     $this->db->where('no', $no);

     if (!empty($first))
     {
         $this->db->or_where('first', $first); // or use `and_where`
     }
     return $query = $this->db->get()->result();
}

来源:http://ellislab.com/codeigniter/user-guide/database/active_record.html

答案 2 :(得分:0)

function query($no = '%', $first = '%')
{
$this->db->where("'no' = $no OR 'first' = $first");
$query = $this->db->get('table');
if($query->num_rows() >= 0)
{
    $return $query->result();
}
}

如果你输入一个外卡值,默认值可以为空(实际上两者都可以为空以返回所有结果)然后只需在双引号内构建整个where语句。

如果你不想在字符串为空的情况下不返回所有结果,你真的不需要提供通配符,但你应该在某处检查空结果或不返回。