当我删除 PASSWORD(?)并放置?而不是它的作品时!
$q = Doctrine_Query::create()
->from('Admanusp_Model_User u')
->where('u.Username = ? AND u.Password = PASSWORD(?)',
array($this->username, $this->password)
);
谢谢!
答案 0 :(得分:0)
在您的应用程序中获取密码之前,您需要首先在数据库中哈希密码。
在数据库中存储密码的方法有很多种。你可能应该在生产环境中使用哈希哈希 - 然而 - 简单地说,我想你只使用MD5()。
正如您在评论中所写,您的用户表包含纯文本密码。让我们将它们转换为MD5哈希,调用以下查询:
UPDATE user SET Password = MD5(Password)
现在,您可以使用此Doctrine查询检查给定的用户数据是否正确:
$q = Doctrine_Query::create()
->from('Admanusp_Model_User u')
->where('u.Username = ? AND u.Password = ?',
array($this->username, md5($this->password))
);
我建议您不要在查询中输入纯文本密码,例如:
->where('u.Username = ? AND u.Password = MD5(?), array($this->username, $this->password));
因为这些密码可以保存在DBMS或探查器日志中。
根据manual,你不应该使用MySQL PASSWORD()函数:
PASSWORD()函数由MySQL中的身份验证系统使用 服务器;你不应该在自己的应用程序中使用它。为了那个原因 目的,改为考虑MD5()或SHA1()。
希望这些信息能引导你朝着正确的方向前进。