2016-03-15 1 views
2

Я имел проблемы запуска запроса и подсчета результатов с этим кодом:CodeIgniter - различия Запрос

$this->db->get_where('user_tb', array('username' => $username, 'password' => $password)); 
$count = $this->db->count_all_results(); 

И всегда возвращаются 1 даже если имя пользователя и пароль неверны.

Тогда я изменил мой код:

$sql = "SELECT * FROM user_tb WHERE username = ? AND password = ?"; 
$this->db->query($sql, array($username, $password)); 
$count = $this->db->count_all_results(); 

Но результат все тот же.

Тогда моя третья и последняя попытка, я изменил код:

$this->db->where('username', $username); 
$this->db->where('password', $password); 
$this->db->from('user_tb'); 
$count = $this->db->count_all_results(); 

Затем он работает. Каковы различия между этими тремя? Почему последний набор кодов работает, а два других - нет? Все еще изучаю CI, так голый со мной.

ответ

1

Во второй строке вы используете массив, но в третьей строке вашего кода вы использовали одиночную переменную для сравнения значения столбца, поэтому его работа. Чтобы использовать массив в запросе, используйте оператор IN().

Passing an array to a query using a WHERE clause

1

Его, потому что $this->db->get_where(); и $this->db->query(); выполнил запрос и возвратил SQL результат и закончился SQL выполнение. После выше двух вызовов, когда вы вызываете $this->db->count_all_results();, он не зависит от двух вызовов. Таким образом, он возвращает 1. и в

$this->db->where('username', $username); 
$this->db->where('password', $password); 
$this->db->from('user_tb'); 
$count = $this->db->count_all_results(); 

Выполнение выполняется с помощью трехстрочного построителя запросов. Так что это нормально.

Попробуйте увидеть разностное

$result = $this->db->get_where('user_tb', array('username' => $username, 
      'password' => $password)); 
$count = $this->db->count_all_results(); 

print_r($result); // you will see it contains all data related to your query. 

Без запроса при использовании $this->db->count_all_results(); что эквивалентно SELECT COUNT(*) AS numrows и возвратит 1. В своих двух предыдущих случаях происходит то же самое.

0

Попробуйте следующий код в модели

 

    class Auth_login extends CI_Model 
    { 
     public function user_auth($username, $password) 
     { 
      $q = $this->db->where(['uname'=>$username, 'password'=>$password]) 
          ->get('table'); //your table name 

      if($q->num_rows()) 
      { 
       return $q->row()->id; //primary key of returned row 
      } 
      else 
      { 
       return FALSE; 
      } 

     } 
    } 

Добавьте этот код в контроллер для аутентификации пользователя

 

    $username = $this->input->post('user'); 
    $password = $this->input->post('pwd'); 
    $this->load->model('auth_login'); 
    $login_id = $this->auth_login->user_auth($username, $password); 
    if($login_id) 
     { 
      $this->load->library('session'); 
      $this->session->set_userdata('id',$login_id); 
      return redirect('user/dashboard'); 
     }      
    else 
     { 
      $this->session->set_flashdata('feedback','password not match!'); 
     } 
     return $this->load->view('index_login'); 

0

Привета попробуйте этот код и вернуть-й число изменяемых строк

$this->db->get_where('user_tb', array('username' => $username, 'password' => $password)); 
$query = $this->db->get(); 
$rowcount = $query->num_rows(); 

и дайте мне знать, что это работает или нет.

Смежные вопросы