Подсчет количества результатов, возвращаемых запросом к базе данных в Codeigniter - PullRequest
6 голосов
/ 08 сентября 2010

Мне не повезло обнаружить, когда запрос к базе данных в 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 на своем ноутбуке разработчика.

Ответы [ 6 ]

11 голосов
/ 08 сентября 2010

Посмотрите на $query->num_rows (<- кликабельно). </p>

8 голосов
/ 08 сентября 2010

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

$query = $this->db->something()....
...
...
if ( $query->num_rows() > 0 )
{
    return $query->result();
}
else
{
    return FALSE;
}

Тогда в вашем контроллере или представлении вы сделаете следующее:

if ( !empty($my_db_result) ) 
{
    ......
}

Этот процесс позволяет вам ответить на результат в зависимости от типа результата. Если строки могут быть получены, это вернет массив, элементы которого могут быть подсчитаны с помощью PHP-функции count (). Поскольку второй блок проверяет, является ли результат пустым (обратите внимание, что «ЛОЖЬ» обрабатывается как пустой), вы не столкнетесь с какими-либо проблемами (например, при использовании цикла foreach), и вы можете указать, что делать в случае отсутствия результаты.

0 голосов
/ 02 апреля 2016

Я даю это, и оно работает для меня

Контроллер

$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;
        }
    }
}
0 голосов
/ 02 апреля 2016

например, я считаю, чтобы показать подключенных администраторов и подключенных пользователей

База данных

в пользователях я добавляю таблицу: [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>
0 голосов
/ 09 сентября 2010

Если вы поместите count($result) в оператор if, то при успешном выполнении он возвращает только 1.

Вы можете попробовать $query->num_rows() по-другому.

0 голосов
/ 08 сентября 2010

Попробуйте if(isset($result) && count($result)) в вашем файле представления, а затем внутри оператора if вы можете написать код, который вы хотите выполнить, когда число вставок в вашей базе данных больше 0 ... удачи!

...