我正在调查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子句进行结果行计算的正确方法是什么(我使用这个)?
答案 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()
一样好。