2010-06-01 11 views
6

Estoy investigando Zend Framework y actualmente tengo dificultades para contar las filas resultantes de la consulta sql ... Cada método que intento (de documentación y algunos blogposts y tutoriales) devuelve un error (como Call to undefined function) o simplemente da el valor incorrecto.Zend Framework - conteo de filas en la cláusula de selección?

He intentado esto:

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

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

... entonces éste:

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

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

e incluso:

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

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

también rowCount() y count(fetchRow()) y count(fetchAll()->toArray()). Pero siempre recibí un mensaje de error o insertos duplicados en db en la función de inserción adicional. Entonces, ¿cuál es la forma correcta de hacer el cálculo de filas resultante en la cláusula de selección en Zend Framework 1.9 (yo uso este)?

Respuesta

15

El uso que usted está tratando de hacer es la siguiente:

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

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

tengo un par de consejos:

Me reestructurar la consulta como la siguiente:

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

Usted no tiene que reportar los diferentes casos para el usuario - de hecho, es la práctica mejor seguridad no decirles cuál de el inicio de sesión o la contraseña es incorrecta. Pero es posible que desee saber en su propio código para poder bloquear una cuenta que recibe muchas contraseñas fallidas.

SHA1() no es tan bueno como SHA2() que es available in MySQL 5.5 y posterior.

+0

Gracias! tho, $ contraseña variable es md5 hash con sal – moogeek