所以遵循所有基本教程。我使用的是Zend 1.8但是在使用Zend_Auth_DB时我一直遇到这个异常。任何想法,表中只有一行。
Exception information:
Message: The supplied parameters to Zend_Auth_Adapter_DbTable failed to produce a valid sql statement, please check table and column names for validity.
Stack trace:
#0 C:\projects\BHAA_ZEND\library\Zend\Auth\Adapter\DbTable.php(306): Zend_Auth_Adapter_DbTable->_authenticateQuerySelect(Object(Zend_Db_Select))
#1 C:\projects\BHAA_ZEND\library\Zend\Auth.php(117): Zend_Auth_Adapter_DbTable->authenticate()
#2 C:\projects\BHAA_ZEND\application\controllers\LoginController.php(79): Zend_Auth->authenticate(Object(Zend_Auth_Adapter_DbTable))
#3 C:\projects\BHAA_ZEND\application\controllers\LoginController.php(38): LoginController->getAuthAdapter(Array)
#4 C:\projects\BHAA_ZEND\library\Zend\Controller\Action.php(512): LoginController->processAction()
#5 C:\projects\BHAA_ZEND\library\Zend\Controller\Dispatcher\Standard.php(288): Zend_Controller_Action->dispatch('processAction')
#6 C:\projects\BHAA_ZEND\library\Zend\Controller\Front.php(945): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#7 C:\projects\BHAA_ZEND\library\Zend\Application\Bootstrap\Bootstrap.php(77): Zend_Controller_Front->dispatch()
#8 C:\projects\BHAA_ZEND\library\Zend\Application.php(328): Zend_Application_Bootstrap_Bootstrap->run()
#9 C:\projects\BHAA_ZEND\public\index.php(33): Zend_Application->run()
#10 {main}
这是有问题的代码。
public function getAuthAdapter(array $params)
{
$dbAdapter = Zend_Db_Table::getDefaultAdapter();
$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
$authAdapter->setTableName('login')
->setIdentityColumn('username')
->setCredentialColumn('password');
//->setCredentialTreatment('MD5(?)');
// pass to the adapter the submitted username and password
$authAdapter->setIdentity($username)->setCredential($password);
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);
if ($result->isValid()) {
// success : store database row to auth's storage system
// (not the password though!)
$data = $authAdapter->getResultRowObject(null, 'password');
$auth->getStorage()->write($data);
//$this->_redirect('/');
return $this->_helper->redirector('index','index');
} else {
// failure: clear database row from session
$this->view->message = 'Login failed.';
return $this->render('index');
}
return $result;
}
您是否阅读过Zend_Auth_Adapter_DbTable的文档? - 是的,但我不确定它是否清除或混淆了我的理解。
您是否拥有与数据库的有效连接? - 是的,有一个工作的CRUD应用程序具有相同的数据库配置。
用户表的结构是什么? -
您是否正确地将身份和凭据列指定给Zend_Auth_Adapter_DbTable的构造函数? - 见上面的代码,我相信。
您是否还指定了您尝试进行身份验证的用户名/密码? - 是的,有一个Zend表单提交这些变量。
导致错误的SQL查询是什么?我想是这样的。
SELECT `isp_partners_view`.*, (CASE WHEN `password` = '*****' THEN 1 ELSE 0 END) AS `zend_auth_credential_match` FROM `isp_partners_view` WHERE (`username` = '*****')
答案 0 :(得分:4)
您已经提供了错误,但我还要求尝试解决此问题的其他一些问题:
您是否阅读了Zend_Auth_Adapter_DbTable
的文档?
您是否有与数据库的有效连接?
users
表的结构是什么?
您是否正确地为Zend_Auth_Adapter_DbTable
的构造函数指定了身份和凭据列?
您是否还指定了您尝试进行身份验证的用户名/密码?
导致错误的SQL查询是什么?您可以通过以下方式查看查询:
$select = $authAdapter->getDbSelect();
print $select . "\n";