2012-01-14 2 views
0

Итак, я пытаюсь использовать функциональность сегмента URI CodeIgniter. У меня есть сегменты URI, которые используются как идентификаторы для извлечения информации из базы данных. Он работает нормально, но я заметил, что если я добавлю идентификатор, который не существует в базе данных, он выплевывает ошибку базы данных.URI для извлечения данных базы данных (CodeIgniter)

Как предотвратить это?

Код модели:

$query = $this->db->select('*') 
    ->from('questions') 
    ->where('questions.id', $question_id) 
    ->join('users', 'users.id = questions.user_id') 
    ->get(); 
return $query->row(); 

вызов модели контроллера:

$question_id = $this->uri->segment(3); 
$data['question'] = $this->forum_model->get_question($question_id); 

ошибка PHP:

A PHP Error was encountered
Severity: Notice
Message: Trying to get property of non-object

+0

показать код, как вы извлечения данных, а также сообщение об ошибке базы данных – ariefbayu

ответ

0

Вы должны проверить, если запрос возвращал результатов перед вызовом $ query-> row

Способ сделать это:

$query = $this->db->select('*') 
    ->from('questions') 
    ->where('questions.id', $question_id) 
    ->join('users', 'users.id = questions.user_id') 
    ->get(); 
    if($query->num_rows() > 0) 
      return $query->row(); 
    else 
      return false; 

$ query-> num_rows() даст вам количество возвращаемых строк.

+0

Итак, я попробовал это, но все равно дал мне ту же ошибку. Это потому, что функция все еще пытается захватить значение, которое не существует из контроллера? Как я могу проверить функцию, чтобы убедиться, что этого не происходит? – Sneaksta

+0

@Sneaksta $ query-> num_rows() должно быть достаточно проверки, чтобы убедиться, что вы получили результаты. Можете ли вы дать более подробную информацию об ошибке и о том, что вызывает ошибку? – applechief

+0

Ну, положив недопустимый персонаж, он испортил это. Теперь я просто выполнил простую функцию, которая проверяет введенные символы и делает их нормальными, а затем отправляет значение по умолчанию, если оно не является. – Sneaksta

0

отлаживать просто сделать это ...

//if this gives u no result, then thats the problem because it couldnt find the 
    //$this->uri->segment(3); 
$question_id = $this->uri->segment(3); 
echo $question_id; 

//if this prints out the expected result. 
//then you should know that the problem is still somewhere down the code. 
$data['question'] = $this->forum_model->get_question($question_id); 
var_dump($data['question']); 


//this is for your model. 
echo $question_id 
$query = $this->db->select('*') 
    ->from('questions') 
    ->where('questions.id', $question_id) 
    ->join('users', 'users.id = questions.user_id') 
    ->get(); 
return $query->row(); 

Примечание: если все это Echos выводит допустимые значения, а затем проверить где-нибудь еще для задачи

Смежные вопросы