Подсчет количества результатов, возвращаемых запросом к базе данных в Codeigniter
Мне не повезло обнаружить, когда запрос к базе данных в Codeigniter возвращает ноль результатов. Я хорошо прочитал заметки о функции подсчета PHP, но я не мудрый!
Я вызываю запрос / представление следующим образом из контроллера:
$data['result'] = $this->search_model->do_search(set_value('name'));
$data['title'] = "Search results";
$this->load->view('search_view',$data);
Ок, представление генерирует для меня таблицу результатов, но когда я пытаюсь перехватить пустой результат, счетчик всегда возвращает 1:
я пытался if count(array($result))
и просто if count($result)
Так какой же хороший способ получить счет? Я использую Fedora 13 с PHP 5.3.3 на своем ноутбуке dev.
6 ответов
Лучшее, что можно сделать в вашей модели:
$query = $this->db->something()....
...
...
if ( $query->num_rows() > 0 )
{
return $query->result();
}
else
{
return FALSE;
}
Затем в вашем контроллере или представлении вы должны сделать следующее:
if ( !empty($my_db_result) )
{
......
}
Этот процесс позволяет вам реагировать на результат в зависимости от типа результата. Если строки могут быть получены, это вернет массив, элементы которого могут быть подсчитаны PHP-функцией count(). Поскольку второй блок проверяет, является ли результат пустым (обратите внимание, что "ЛОЖЬ" обрабатывается как пустой), вы не столкнетесь с какими-либо проблемами (например, при использовании цикла foreach), и вы можете указать, что делать в случае отсутствия Результаты.
Пытаться if(isset($result) && count($result))
затем в вашем файле представления внутри оператора if вы можете написать код, который вы хотите выполнить, когда число вставок в вашей базе данных больше 0... удачи!
Я даю это, и это сработало для меня
контроллер
$id = $this->session->userdata('id');
if($this->model_users->if_user_dont_have_email($id)){
....
}
Модель Пользователи
public function if_user_dont_have_email($id){
$query = $this->db->query("SELECT email FROM users WHERE id='$id'");
if ($query->num_rows() > 0) {
$row = $query->row_array();
if(empty($row['email'])){
return true;
}else{
return false;
}
}
}
Например, я считаю, чтобы показать, что администраторы подключены и пользователи подключены
База данных
в пользователях я добавляю таблицу: [status] [int] [1]
у пользователей также есть: [роль] [varchar] [255]
Обновите статус до 1 (onligne) при проверке логина ()
if($this->model_users->can_log_in($email,$pass)){
$update = array('status' => 1);
$this->model_users->update_onligne($email,$update);
redirect('main/members');
и модель:
public function update_onligne($email,$update){
$this->db->where('email',$email);
$this->db->update('users',$update);
return true;
}
Обновление статуса на оффлайн при выходе из системы ()
Контроллер выхода из системы:
public function logout(){
$id = $this->session->userdata('id');
$update = array('status' =>0);
$this->model_users->logout($id,$update);
$this->session->sess_destroy();
redirect('main/login');
}
Модель выхода из системы:
public function logout($id,$update){
$this->db->where('id',$id);
$this->db->update('users', $update);
return;
}
Граф Онлинье:
Контроллер:
$data['admin_onligne'] = $this->model_users->count_onligne_admin();
$data['user_onligne'] = $this->model_users->count_onligne_users();
$this->load->view('template/page_left',$data);
Модель:
public function count_onligne_admin(){
$query = $this->db->query('SELECT COUNT(status) AS enligneadmin FROM users WHERE status=1 AND role="admin"')->row_object();
return $query->enligneadmin;
}
public function count_onligne_users(){
$query = $this->db->query('SELECT COUNT(status) AS enligneuser FROM users WHERE status=1 AND role="etudiant"')->row_object();
return $query->enligneuser;
}
Зритель
<span><?php echo $user_onligne ;?> User en ligne</span>
<span><?php echo $admin_onligne ;?> Admin en ligne</span>
Если вы положите count($result)
в if
Заявление тогда, когда это успешно, он возвращает только 1
,
Ты можешь попробовать $query->num_rows()
по-другому.