2017-02-22 11 views
0

CIを使用してワイルドカード検索クエリを実行しようとしています。CodeIgniterワイルドカードクエリ

ログインしているセッションを確認しています。ユーザーが複数のデバイスにログインしている場合、ポップアップが表示されます。ユーザーが他のデバイスからログインしているかどうかを調べるために、user_data列にそのユーザーIDの存在をチェックし、行数を返すワイルドカード照会を実行します。私が直面している問題は、最初にログインしても、else節になり、if節またはif-else節には入りません。

私のコントローラでは、else節に達したらポップアップを表示します。しかし、誰かが初めてログインしても、else節に行きます。

モデル:

public function update_bool($id) { 
     $this->db->select('user_data'); 
     $this->db->from('ci_sess'); 
     $this->db->like('user_data', $id, 'both'); 
     $counter = $this->db->get()->row(); 
      if (empty($counter)) $counter = 0; 
      else if($counter === 1) $counter = 1; 
      else $counter = 3; 
     return $counter; 
    } 

コントローラー:あなたが行数をカウントする必要が

$counter = $this->ion_auth_model->loggedin_status_update_bool($userId); 
     if($this->ion_auth_model->loggedin_status_update_bool($userId) === 3) { 
      warning('multiple_session_title', 'multiple_session_text'); 
     } 

答えて

1

は、クエリによって返されます。レコードの数に基づいて、あなたの状態は動作します。現在、配列の型を返す1行です。 And $counter as array to match else if condition will always fail.

私はこれがあなたを助けてくれることを願っています。 )(行> -

.... 
$query = $this->db->get(); 
$counter = $query->num_rows(); 
if (empty($counter)) { 
    $counter = 0; 
}else if($counter === 1) { 
    $counter = 1; 
} else { 
$counter = 3; 
} 
return $counter; 
0

私はあなたの速記は少し外れかもしれないと私はあなたが何を意味するかを理解するならば、あなたはそれを使用して得ることができなかったという意味テーブル内の同じユーザーに対して複数のセッションが存在することになると思います。

このようにしてみてください。

public function update_bool($id) { 
    $this->db->select('user_data'); 
    $this->db->from('ci_sess'); 
    $this->db->like('user_data', $id, 'both'); 
    $query = $this->db->get(); 

    return $query->num_rows(); // This will give you now many times this user exists in the database, eg 0, 1, 2, 3 
} 

次にあなたが二回データベースを呼び出していないので、あなたのコントローラをクリーンアップ:

$counter = $this->ion_auth_model->loggedin_status_update_bool($userId); 
if($counter == 3) { 
     warning('multiple_session_title', 'multiple_session_text'); 
} 
関連する問題