Zend Framework - подсчет строк в предложении select? - PullRequest
6 голосов
/ 02 июня 2010

Я изучаю Zend Framework и в настоящее время застрял в подсчете результирующих строк SQL-запроса ... Каждый метод, который я пробую (из документации, некоторых постов и уроков), возвращает ошибку (например, Call to undefined function) или просто дает неправильное значение .

Я пробовал это:

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

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

... тогда этот:

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

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

и даже:

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

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

Также rowCount() и count(fetchRow()) и count(fetchAll()->toArray()). Но всегда я получаю сообщение об ошибке или повторяющиеся вставки в БД в дальнейшей функции вставки. Итак, как правильно выполнить вычисление строки в предложении select в Zend Framework 1.9 (я использую этот)?

1 Ответ

15 голосов
/ 02 июня 2010

Использование, которое вы пытаетесь сделать, выглядит следующим образом:

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

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

У меня есть пара других советов:

Я бы перестроил запрос следующим образом:

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

Вам не нужно сообщать о различных случаях пользователю - фактически это лучшая практика безопасности , а не , чтобы сообщить им, какой логин или пароль неверен. Но вы, возможно, захотите узнать это в своем собственном коде, чтобы заблокировать учетную запись, которая получает много ошибочных паролей.

SHA1() не так хорош, как SHA2(), который доступен в MySQL 5.5 и более поздних версиях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...