我的 webapp 有一个登录系统,使用 Zend auth 适配器运行良好,但问题是我希望用户登录时电子邮件不区分大小写。我使用 Oracle 作为后端数据库,通常我会使用该LOWER(EMAIL)=LOWER(:email)
方法. 我试图在 setIdentityColumn() 中传递该 Oracle 函数,但出现错误:
提供给 Zend_Auth_Adapter_DbTable 的参数未能生成有效的 sql 语句,请检查表名和列名的有效性。
protected function _getAuthAdapter()
{
//$dbAdapter = Zend_Db_Table::getDefaultAdapter();
$db = Zend_Registry::get('db');
$authAdapter = new Zend_Auth_Adapter_DbTable($db);
$authAdapter->setTableName('USER_TABLE')
->setIdentityColumn('LOWER(EMAIL)') //Tried to pass LOWER()
->setCredentialColumn('ENCODED_PW')
->setCredentialColumn('PASSWORD');
return $authAdapter;
}
错误来自类_authenticateCreateSelect()
中的函数Zend_Auth_Adapter_DbTable
。问题是脚本的这一部分:
$dbSelect->from($this->_tableName, array('*', $credentialExpression))
->where($this->_zendDb->quoteIdentifier($this->_identityColumn, true) . ' = ?', $this->_identity);
该quoteIdentifier()
方法类似于 PHP quote()
,并且正在转换如下查询:
从 LOWER(:email) 中选择 *
进入这个:
从“LOWER(:电子邮件)”中选择 *
有人看到解决方法吗?
亲切的问候内森