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可用及更高版本.