我需要帮助解决数据库中的验证错误。
我有一个模特:
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并且不显示错误数据库并继续循环。我不知道怎么能这样做。我在论坛上尝试了很多选项,但我做不到。谢谢你的帮助。对不起我的英语。
答案 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,它可以直接进入控制器函数。