在 codeigniter 中搜索查询

Posted

技术标签:

【中文标题】在 codeigniter 中搜索查询【英文标题】:Search Query in codeigniter 【发布时间】:2017-11-19 00:12:26 【问题描述】:

我是 codeigniter 的新手。我想创建一个搜索栏,用户在其中写一些关键字,它将检查数据库中表的所有字段,然后显示相关结果。

这是我的查看代码:

<?php

    echo '<h2>Search Books</h2>';
    echo form_open('site/search');?>

<p>
<label for="title"> Title:</label>
 <input type="text"  placeholder="Search" name="search" size="50%">
</p>
<input type="submit" value="Submit"/>
    <?php echo form_close(); ?>

<!--Here will be Search Result-->
<?php if (isset($searches)): foreach($searches as $search):?>
<h4><?php echo " &nbsp ";
echo $search->book_name;
echo " &nbsp "; ?></h4>
<?php endforeach; ?>
<?php else: ?>
No Book Found
<?php endif;?>

而名为 site 的控制器代码是

function search()

            $search_book = array (
                            $search= $this->input->post('search')
            );
            $this->users_model->user_search($search_book);
            $this->dashboard();

控制器中查询结果

if ($query = $this->users_model->user_search())
            

                $search['searches'] = $query;
            
            $data = $search;
             $this->load->view('dashboard', $data);

这是型号代码:

function user_search($search_book)

                 $query = $this->db->like('book_name', $search_book);
             $this->db->or_like('author', $search_book);
              $this->db->or_like('date', $search_book);
             $this->db->get('books');
                return $query->result();

错误显示

遇到了 PHP 错误

严重性:警告

消息:在调用中缺少 Users_model::user_search() 的参数 1 C:\xampp\htdocs\Pure_Logics\application\controllers\site.php 上线 28和定义

文件名:models/users_model.php

行号:26

回溯:

文件:C:\xampp\htdocs\Pure_Logics\application\models\users_model.php 行:26 函数:_error_handler

文件:C:\xampp\htdocs\Pure_Logics\application\controllers\site.php 行:28 功能:user_search

文件:C:\xampp\htdocs\Pure_Logics\index.php 行:315 功能: 需要一次

【问题讨论】:

$this->users_model->user_search() 缺少参数 【参考方案1】:

方法调用中缺少参数

$this->users_model->user_search()

改成

 if ($query = $this->users_model->user_search($this->input->post('search')))
  

     $search['searches'] = $query;
  

型号:

function user_search($search_book)

                 $this->db->like('book_name', $search_book);
                 $this->db->or_like('author', $search_book);
                 $this->db->or_like('date', $search_book);
                 $query = $this->db->get('books');
                 return $query->result();
  

控制器:

function search()

    $this->dashboard();
     $data['searches'] =array();
    if ($query = $this->users_model->user_search($this->input->post('search')))
    

        $data['searches'] = $query;
    

     $this->load->view('dashboard', $data);


1) 你调用没有参数的方法。但是您定义的方法在模型中带有参数。

【讨论】:

我错过了哪个论点?我不明白 亲爱的我不知道我可以通过哪个参数?请帮帮我,告诉我哪个参数会在这里通过? 现在它显示了另一个错误Fatal error: Call to undefined method CI_DB_mysqli_driver::result() in C:\xampp\htdocs\Pure_Logics\application\models\users_model.php on line 32 谢谢大哥 :) 很高兴帮助你@sunny【参考方案2】:

使用多个条件选择数据并搜索关键字

 function select_data_by_search($tablename, $search_condition, $condition_array = array(), $data = '*', $sortby = '', $orderby = '', $limit = '', $offset = '', $join_str = array()) 
    $this->db->select($data);
    if (!empty($join_str)) 
        foreach ($join_str as $join) 
            $this->db->join($join['table'], $join['join_table_id'] . '=' . $join['from_table_id']);
        
    
    $this->db->where($condition_array);
    $this->db->where($search_condition);

    //Setting Limit for Paging
    if ($limit != '' && $offset == 0) 
        $this->db->limit($limit);
     else if ($limit != '' && $offset != 0) 
        $this->db->limit($limit, $offset);
    
    //order by query
    if ($sortby != '' && $orderby != '') 
        $this->db->order_by($sortby, $orderby);
    

    $query = $this->db->get($tablename);
    //if limit is empty then returns total count
    if ($limit == '') 
        $query->num_rows();
    
    //if limit is not empty then return result array
    return $query->result_array();

函数传递参数说明 $tablename="tablename"; $search_condition="通过搜索刺痛"; $condition_array="在数组中传递多个 where 条件,例如:- array("con1"=>"value","con2"=>"value")"; $data = '选择数据名称,例如:- user.name,user.email' $sortby="排序值"; $orderby="orderby 价值"; $limi="限制值"; $offset=""; $join_str[0]['table'] = 'table1'; $join_str[0]['join_table_id'] = 'table1.id'; $join_str[0]['from_table_id'] = 'maintable.id'; $join_str[0]['join_type'] = 'left';

     $join_str[1]['table'] = 'table1';   
    $join_str[1]['join_table_id'] = 'table1.id';   
    $join_str[1]['from_table_id'] = 'maintable.id';   
    $join_str[1]['join_type'] = 'left';  

【讨论】:

您可以将此功能用于所有模块作为通用搜索功能【参考方案3】:

在您的控制器中:数组格式不正确

function search()
                $search_book = array (
                      'search' => $this->input->post('search')
                );
                $this->users_model->user_search($search_book);
                $this->dashboard();

控制器中查询结果

if ($query = $this->users_model->user_search($search_book))
   
       $search['searches'] = $query;
   
$data = $search;
$this->load->view('dashboard', $data);

型号代码:

function user_search($search_book)

   return $this->db->like('book_name', $search_book);
                     ->or_like('author', $search_book);
                     ->or_like('date', $search_book);
                     ->get('books')->result();

【讨论】:

【参考方案4】:

在控制器的查询结果中,您没有将参数传递给user_search()

if ($query = $this->users_model->user_search())

您必须向它发送一个参数,如下所示:

if ($query = $this->users_model->user_search($search_query))

【讨论】:

您需要向它发送参数,例如:if ($query = $this-&gt;users_model-&gt;user_search($this-&gt;input-&gt;post('search')))

以上是关于在 codeigniter 中搜索查询的主要内容,如果未能解决你的问题,请参考以下文章

nginx配置CI重写规则,codeigniter

使用 codeigniter ci_marchant_Lib 库的 PayPal 定期付款

无法在数据库 PHP、Codeigniter 中搜索现有值

将分页与查询字符串一起用于搜索表单,该表单的方法设置为进入 codeigniter

具有限制和偏移量的 CodeIgniter sql 查询未显示结果

为啥 CodeIgniter 不会在括号中返回 SQL 查询的结果?