2010-06-01 16 views
6

Badam Zend Framework i obecnie utknąłem w liczeniu wynikowych wierszy kwerendy sql ... Każda metoda, którą wypróbuję (z dokumentacji i niektórych blogów i tutoriali) zwraca błąd (np. Call to undefined function) lub po prostu podaje niepoprawną wartość.Zend Framework - zliczanie wierszy w klauzuli select?

Próbowałem to:

$checkquery = $db->select() 
    ->from('users', 'COUNT(*)') 
    ->where('login = ?', $login) 
    ->where('password = ?', $password) 
    ->query(); 

$checkrequest=fetchRow($checkquery)->num; 

... wtedy ten jeden:

$checkquery = $db->select() 
    ->from('users', '*') 
    ->where('login = ?', $login) 
    ->where('password = ?', $password) 
    ->query(); 

$checkrequest=count($checkquery->fetchAll()); 

a nawet:

$checkquery = $db->select() 
    ->from('users', '*') 
    ->where('login = ?', $login) 
    ->where('password = ?', $password) 
    ->query(); 

$checkrequest=$checkquery->fetchAll()->num; 

także rowCount() i count(fetchRow()) i count(fetchAll()->toArray()). Ale zawsze dostałem komunikat o błędzie lub duplikaty insertów w db w dalszej funkcji wstawiania. Jaki jest więc właściwy sposób obliczania wynikowego wiersza w klauzuli select w Zend Framework 1.9 (używam tego)?

Odpowiedz

15

Wykorzystanie starasz się zrobić to w następujący sposób:

$checkquery = $db->select() 
    ->from("users", array("num"=>"COUNT(*)")) 
    ->where("login = ?", $login) 
    ->where("password = ?", $password); 

$checkrequest = $db->fetchRow($checkquery); 
echo $checkrequest["num"]; 

Mam kilka innych wskazówek:

chciałbym zrestrukturyzować kwerendę tak:

$checkquery = $db->select() 
    ->from("users", array("pwd_is_correct"=> 
    $db->quoteInto("(password = SHA1(CONCAT(salt, ?)))", $password))) 
    ->where("login = ?", $login); 

$checkrequest = $db->fetchRow($checkquery); 
if ($checkrequest === false) { 
    echo "no such login\n"; 
} else if ($checkrequest["pwd_is_correct"] > 0) { 
    echo "login and password are correct\n"; 
} else { 
    echo "login found but password is incorrect\n"; 
} 

nie trzeba zgłaszać różne przypadki użytkownikowi - w rzeczywistości jest to praktyka Najlepsze zabezpieczenia nie im powiedzieć, który z login lub hasło jest nieprawidłowe. Ale możesz chcieć wiedzieć w swoim własnym kodzie, aby zablokować konto, które otrzymuje wiele nieudanych haseł.

SHA1() nie jest tak dobry jak SHA2(), który jest available in MySQL 5.5 i późniejszy.

+0

Dzięki! tho, $ zmienna password to md5 hashed with salt – moogeek