Zend Framework - 计算select子句中的行?

时间:2010-06-01 20:45:24

标签: php zend-framework mysql

我正在调查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())。但总是在进一步插入函数中我在db中收到错误消息或重复插入。那么在Zend Framework 1.9中使用select子句进行结果行计算的正确方法是什么(我使用这个)?

1 个答案:

答案 0 :(得分:15)

您尝试使用的用法如下:

$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()不如available in MySQL 5.5及以后的SHA2()一样好。