Мне не очень повезло, когда запрос базы данных в 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.
Посмотрите на $query->num_rows
(<- clickable).
Лучше всего сделать в вашей модели следующее:
$query = $this->db->something().... ... ... if ( $query->num_rows() > 0 ) { return $query->result(); } else { return FALSE; }
Затем в вашем контроллере или представлении вы сделаете следующее:
if ( !empty($my_db_result) ) { ...... }
Этот процесс позволяет вам реагировать на результат на основе типа результата. Если строки могут быть восстановлены, это вернет массив, из которого элементы могут быть подсчитаны функцией count () PHP. Поскольку второй блок проверяет, является ли результат пустым (обратите внимание, что «FALSE» рассматривается как пустой), вы не столкнетесь ни с какими проблемами (например, при использовании цикла foreach), и вы можете указать, что делать, если бы не было Результаты.
Попробуйте, if(isset($result) && count($result))
в вашем файле вида, то внутри оператора if вы можете написать код, который вы хотите выполнить, когда вставки в вашем db больше 0 … удачи!
Если вы положите count($result)
в оператор if
затем, когда он завершится, он возвращает только 1
.
Вы можете попробовать $query->num_rows()
по-другому.
например, я подсчитываю, чтобы показать администраторам, подключенным и подключенным пользователям
База данных
в пользователях я добавляю таблицу: [status] [int] [1]
у пользователей также есть: [role] [varchar] [255]
Обновить statut до 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 = $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>
я обманываю это, и это работает для меня
контроллер
$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; } } }