6

Codeigniter のデータベース クエリがゼロの結果を返すタイミングを検出できません。私は PHP の count 関数に関する注意事項をよく読みましたが、賢明ではありません!

コントローラーから次のようにクエリ/ビューを呼び出します。

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

では、カウントを取得するための良い方法は何ですか? 開発用ラップトップで PHP 5.3.3 を搭載した Fedora 13 を使用しています。

4

6 に答える 6

14

$query->num_rows(<- クリック可能)をご覧ください。

于 2010-09-08T12:45:18.740 に答える
8

モデルで行う最善の方法は次のとおりです。

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

次に、コントローラーまたはビューで次のことを行います。

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

このプロセスにより、結果タイプに基づいて結果に応答できます。行を取得できた場合、PHP の count() 関数で項目をカウントできる配列が返されます。2 番目のブロックは結果が空かどうかをチェックするため (「FALSE」は空として扱われることに注意してください)、問題が発生することはありません (たとえば、foreach ループを使用する場合)。結果。

于 2010-09-08T14:05:35.940 に答える
0

たとえば、接続されている管理者と接続されているユーザーを表示するために数えます

データベース

ユーザーでは、テーブルを追加します:[ステータス] [int] [1]

ユーザーにもあります:[role] [varchar] [255]

login validation() で statut を 1 (オンライン) に更新します

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

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

ログアウトモデル:

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>
于 2016-04-02T16:12:02.703 に答える
0

ステートメントを入れるcount($result)と、if成功すると のみが返されます1

別の方法で試すことができます $query->num_rows()

于 2010-09-09T11:46:39.420 に答える
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;
        }
    }
}
于 2016-04-02T16:48:49.980 に答える
0

ビュー ファイルを試しif(isset($result) && count($result))てから、if ステートメント内に、db への挿入が 0 を超えたときに実行するコードを記述できます。頑張ってください!

于 2010-09-08T13:48:08.400 に答える