Подсчет количества результатов, возвращаемых запросом к базе данных в 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->num_rows (<- кликабелен).

Лучшее, что можно сделать в вашей модели:

$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() по-другому.

Другие вопросы по тегам