2016-11-11 3 views
1

Я продолжаю получать эту ошибку и не понимаю, что не так. Когда пользователь ищет строку, он должен возвращать все сообщения, содержащие эту строку.Ошибка Codeigniter Сообщение: Вызов функции-функции члена() по нуле

Это мой контроллер для поиска:

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); 
} 

функция My doSearch в messages_mdoel:

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-> load-> вид ('view_messages', $ данных);' и это то, что вы используя 'foreach ($ messages-> result() как $ message)'. См. Разницу/ошибку? –

ответ

0

Исправление вашего запроса, ваш запрос ниже:

$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"; 

и удалить $string переменные в $query = $this->db->query($sql,$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; 
    } 
} 
?> 

Или с Query Builder Класс:

<?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; 
    } 
} 
?> 
Смежные вопросы