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

moo*_*eek 6 php mysql zend-framework

我正在调查Zend Framework并且目前正在计算结果的sql查询行...我尝试的每个方法(来自文档和一些博客和教程)都会返回错误(如Call to undefined function)或者只是给出不正确的值.

我试过这个:

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

$checkrequest=fetchRow($checkquery)->num;
Run Code Online (Sandbox Code Playgroud)

......然后这个:

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

$checkrequest=count($checkquery->fetchAll());
Run Code Online (Sandbox Code Playgroud)

乃至:

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

$checkrequest=$checkquery->fetchAll()->num;
Run Code Online (Sandbox Code Playgroud)

rowCount()count(fetchRow())count(fetchAll()->toArray()).但总是在进一步插入函数中我在db中收到错误消息或重复插入.那么在Zend Framework 1.9中使用select子句进行结果行计算的正确方法是什么(我使用这个)?

Bil*_*win 15

您尝试使用的用法如下:

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

$checkrequest = $db->fetchRow($checkquery);
echo $checkrequest["num"];
Run Code Online (Sandbox Code Playgroud)

我还有其他一些提示:

我会像这样重构查询:

$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";
}
Run Code Online (Sandbox Code Playgroud)

您不必向用户报告不同的情况 - 事实上,最好的安全做法是不要告诉他们哪些登录名或密码不正确.但您可能想知道自己的代码,这样就可以锁定一个收到大量失败密码的帐户.

SHA1()是不如SHA2()这是在MySQL 5.5可用及更高版本.