我有一個使用Zend auth適配器運行良好的webapp登錄系統,但問題是我希望電子郵件在用戶登錄時不區分大小寫。我使用Oracle作爲後端數據庫通常我會使用LOWER(EMAIL)=LOWER(:email)
方法。我試圖通過甲骨文的功能在setIdentityColumn(),但我得到的錯誤:Zend DbTable不區分大小寫
The supplied parameters to Zend_Auth_Adapter_DbTable failed to produce a valid sql statement, please check table and column names for validity.
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()
並正在轉向這樣的查詢:
select * from LOWER(:email)
成這樣:
select * from "LOWER(:email)"
任何人看解決這個問題的方法?
親切的問候 彌敦道