База данных ошибок проверки в codeigniter - PullRequest
0 голосов
/ 13 декабря 2011

Мне нужна помощь с ошибкой проверки в базе данных.

У меня есть модель:

 function total ($id_student, $id_course){
         $query = $this->db->query('select total from student where id_student='.$id_student. ' and $id_course='.$id_course);
        if ($query->num_rows() <= 0) {
            return false;

        }
        if ($query->num_rows() > 0) {
            $row = $query->row();
            return $row->total;
        }
     }

У меня есть этот код в контроллере:

$id_course=array;
 $total = array();
        for ($i = 0; $i < count($list_courses); $i++) {            
            $total[$i] = $this->student_model->total($id_student, $id_course[$i]);
            $error[$i]= $this->db->_error_message();
          if(!empty($error[$i])){
                    $total[$i] = 0;                    
                }
        }

Параметры $ id_student и $ id_course могут существовать в базе данных или нет.Мне нужно, чтобы, если запрос выдает ошибку или запрос не существует, пропустите ошибку, сделайте $ total [$ i] = 0 и не показывайте базу данных ошибок и продолжайте цикл.Я не знаю, как я могу это сделать.Я перепробовал много вариантов на форумах, но не смог.Спасибо за вашу помощь.Я извиняюсь за мой английский.

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Я бы изменил функцию модели на;

public function total ($id_student, $id_course){
    $sql = "SELECT `total` FROM `student` WHERE `id_student` = ? AND `id_course` = ? LIMIT 1";
    // to prevent any sql injection, use binding
    $query = $this->db->query($sql, array($id_student, $id_course);
    if ($query->num_rows() > 0) {
        $row = $query->row(0);
        return $row->total;
    } else {
        return 0;
    }
}

Затем изменим контроллер на;

$id_course = array();
$total = array();
// why not use a foreach loop?
for ($i = 0; $i < count($list_courses); $i++) {
    $result = $this->student_model->total($id_student, $id_course[$i]);
    if ($result == 0) {
        $error[$i]= $this->db->_error_message();
    }
    $total[$i] = $result;
}

Возвращая 0 из модели вместо FALSE, он может перейти прямо вфункция контроллера.

1 голос
/ 13 декабря 2011

В методе модели вы возвращаете false, если запрос не дает результата.Таким образом, вы можете сделать это:

$id_course=array;
$total = array();
for ($i = 0; $i < count($list_courses); $i++) {   

    // if query returns false, then $total[$i] will be false         
    $total[$i] = $this->student_model->total($id_student, $id_course[$i]);
    $error[$i]= $this->db->_error_message();

    // check if $total[$i] is empty/false, if so make it 0
    if(empty($total[$i])){
        $total[$i] = 0;                    
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...