Compter le nombre de résultats renvoyés par une requête de base de données dans Codeigniter

StackOverflow https://stackoverflow.com/questions/3667715

Question

Je ne vais pas avoir beaucoup de chance détecter lorsqu'une requête de base de données dans Codeigniter retourne aucun résultat. J'ai eu une bonne lecture des notes sur la fonction de comptage de PHP mais je suis pas le plus sage!

J'appelle la requête / vue comme suit à partir du contrôleur:

$data['result'] = $this->search_model->do_search(set_value('name'));
$data['title'] = "Search results";
$this->load->view('search_view',$data);

Le point de vue me génère un tableau de résultats pour OK, mais quand je tente de piéger un résultat vide, le nombre retourne toujours 1:

J'ai essayé if count(array($result)) et juste if count($result)

Alors, quelle est une bonne façon d'obtenir le nombre? J'utilise Fedora 13 avec PHP 5.3.3 sur mon ordinateur portable dev.

Était-ce utile?

La solution

Jetez un oeil à $query->num_rows (<- cliquable).

Autres conseils

La meilleure chose à faire dans votre modèle est le suivant:

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

Ensuite, dans votre contrôleur ou la vue que vous ne procédez comme suit:

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

Ce processus vous permet de répondre sur le résultat en fonction du type de résultat. Si les lignes pourraient être récupérées cela retourne un tableau dont les éléments peuvent être comptés par le nombre de PHP () fonction. Depuis le second bloc vérifie si le résultat est vide (notez que « FAUX » est traité comme étant vide) vous ne tomber sur des problèmes (par exemple lors de l'utilisation d'une boucle foreach) et vous pouvez spécifier ce qu'il faut faire dans le cas où il n'y avait pas résultats.

Essayez if(isset($result) && count($result)) sur votre fichier de vue puis à l'intérieur de l'instruction if vous pouvez écrire le code que vous voulez exécuter lorsque les inserts dans votre base de plus de 0 ... bonne chance!

Si vous mettez count($result) dans l'instruction if puis quand il succeds, il ne retourne que 1.

Vous pouvez essayer $query->num_rows() d'une manière différente.

Par exemple, je compte montrer admins connectés les utilisateurs connectés ANS

Base de données

utilisateurs i ajouter le tableau: [état] [int] [1]

utilisateurs aussi j'ai: [rôle] [varchar] [255]

Mise à jour de statut à 1 (onligne) en connexion validation ()

if($this->model_users->can_log_in($email,$pass)){   
$update = array('status' => 1);
$this->model_users->update_onligne($email,$update);
redirect('main/members');

et le modèle:

public function update_onligne($email,$update){
        $this->db->where('email',$email);
        $this->db->update('users',$update);
        return true;
    }

Mise à jour le statut hors ligne dans logout ()

contrôleur Logout:

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');
    }

modèle Déconnexion:

public function logout($id,$update){
        $this->db->where('id',$id);
        $this->db->update('users', $update);
        return;
    }

Nombre Onligne:

Le contrôleur:

$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);

Le modèle:

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;
        }

Le Viewer

<span><?php echo $user_onligne ;?> User en ligne</span>
<span><?php echo $admin_onligne ;?> Admin en ligne</span>

Je Dowing cela et il workd pour moi

Contrôleur

$id = $this->session->userdata('id');
if($this->model_users->if_user_dont_have_email($id)){
....
}

Les utilisateurs du modèle

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;
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top