2011-09-26 13 views
5

W CodeIngiter podręcznik użytkownika, mówili następujący kod:problem z „count_all_results” i „gdzie” z Active Record w CodeIgniter

$this->db->where('name', $name); 
$this->db->where('title', $title); 
$this->db->where('status', $status); 
// WHERE name = 'Joe' AND title = 'boss' AND status = 'active' 

Oznacza to, kiedy chcę wybrać kilka rzeczy z bazy danych przez aktywnego rekordu, I należy użyć metody where, a zrobi to, zastępując AND między polami. Teraz chcę utworzyć stronę logowania, robię to:

public function True_login($username = '',$password = '') 
    { 
     $this->db->flush_cache(); 
     $this->db->where('username',$username); 
     $this->db->where('password',$password); 
     $count = $this->db->count_all_results('PM_ADMIN_LIST'); 
     if ($count === 1) 
     { 
      return TRUE; 
     } 
     else 
     { 
      return FALSE; 
     } 
    }
, ale zwróci ona PRAWDA, jeśli username=$username OR password = $password. jeśli w tabeli pojawi się jedna z nazw użytkownika lub hasło (i $count === 1 zwróci TRUE) gdzie jest moja prbolem i jak mam ją rozwiązać?

+1

Zgodnie z dokumentacją, wywołanie "where" dwukrotnie spowoduje wygenerowanie zapytania AND. Nie rozumiem, na czym polega problem? –

+0

Masz na myśli, że zostało ocenione jako "OR" zamiast "AND"? – ace

+0

Czy próbowałeś * Asocjacyjnej metody tablicy *? Którą wersję codeigniter używasz? – hakre

Odpowiedz

12
$this->db->count_all_results('PM_ADMIN_LIST'); 

zwraca liczbę wierszy w tabeli i ignoruje ograniczniki nad nią.

Spróbuj: -

Również umieścić trochę debug w - gdybyś wiedział, jaka jest wartość $count był to może pomogły wypracować, że Active Query Record mylił zamiast myśleć, że to wykonanie OR zamiast AND.

+0

Zrobiłem to, ale zwrócę ten sam rezultat co mój kod. Próbowałem $ count = $ this-> db-> where ('nazwa użytkownika', $ username) -> where ('password', $ password) -> get ('PM_ADMIN_LIST') -> num_rows(); too.but Ma również ten problem. –

+0

Kod, który zamieściłem, powinien działać, proszę opublikuj swoją wersję kodu, którego próbujesz. – Bruce

+0

Przepraszam Bruce, to moja wina. Działa. –

2

Po prostu użyj-> $ this-> db-> count_all(); zamiast $ this-> db-> count_all_results(); Problem rozwiązany .......

0

Można po prostu zrobić to poprzez dodanie drugiego parametru z wartością false w count_all_results() funkcji.

$this->db->count_all_results('PM_ADMIN_LIST',FALSE); 
Powiązane problemy