codeigniter中的验证错误数据库

时间:2011-12-13 13:24:49

标签: codeigniter

我需要帮助解决数据库中的验证错误。

我有一个模特:

 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 个答案:

答案 0 :(得分:1)

在模型方法中,如果查询没有产生结果,则返回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;                    
    }
}

答案 1 :(得分:1)

我会将模型函数更改为;

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,它可以直接进入控制器函数。