2016-11-11 15 views
1

このエラーが発生して何が間違っているのか理解しないでください。ユーザーが文字列を検索すると、その文字列を含むすべてのメッセージが返されます。Codeigniterエラーメッセージ:nullのメンバー関数result()への呼び出し

これは、検索のための私のコントローラである:messages_mdoelで

public function doSearch() { 
$this->load->model('Messages_model'); 
$string = $this->input->get('string'); 
$data['messages']=$this->Messages_model->searchMessages($string); 
$this->load->view('view_messages', $data); 
} 

マイdoSearch機能:

public function searchMessages($string) { 
$sql = "SELECT * FROM Messages WHERE text LIKE '%string%' ORDER BY posted_at DESC"; 
$query = $this->db->query($sql,$string); 

if($query->num_rows() > 0) { 
$messages = array(); 
return $query; 
} 

} 

と私のview_messages:

<?php foreach ($messages->result() as $message): ?> 
<tr> 
<td><?php echo $message->posted_at; ?></td> 
<td><?php echo $message->user_username; ?></td> 
<td><?php echo $message->text; ?></td> 
</tr> 

<?php endforeach; ?> 

助けてください、

+0

これは、あなたが 'ます$ this->ロード - >ビュー( 'view_messages'、$データ)を設定しているものであり、'、これはあなたがしているものです'foreach($ messages-> result()$ message)'を使用します。違い/間違いを見ますか? –

答えて

0
ありがとう

修正SQLクエリは、クエリが怒鳴るです:

$sql = "SELECT * FROM Messages WHERE text LIKE '%string%' ORDER BY posted_at DESC"; 

あなたはLIKE '%string%'を使用しますが、それは間違っています。

それは

$sql = "SELECT * FROM Messages WHERE text LIKE '%$string%' ORDER BY posted_at DESC"; 

ことと怒鳴るよう$query = $this->db->query($sql,$string);$string変数を削除する必要があります。

$query = $this->db->query($sql); 

詳細CI queryドキュメントhttp://www.codeigniter.com/userguide3/database/results.html

だから、あなたのモデルの最後のsearchMessages($string)機能:

<?php 
public function searchMessages($string) { 
    $sql = "SELECT * FROM Messages WHERE text LIKE '%$string%' ORDER BY posted_at DESC"; 
    $query = $this->db->query($sql); 

    if($query->num_rows() > 0) { 
     //$messages = array(); 
     return $query; 
    } 
} 
?> 

またはクエリビルダクラスを持つ:

<?php 
public function searchMessages($string) { 
    //$sql = "SELECT * FROM Messages WHERE text LIKE '%$string%' ORDER BY posted_at DESC"; 

    $this->db->select('*'); 
    $this->db->from('Messages'); 
    $this->db->like('text', $string); 
    $this->db->order_by('posted_at', 'DESC'); 
    $query = $this->db->get(); 

    if($query->num_rows() > 0) { 
     return $query; 
    } 
} 
?> 
関連する問題