2010-09-05 2 views
1

Вот как я получаю идентификатор из базы данных:Zend_Auth_Adapter_DbTable UTF-8

$adapter = new Zend_Auth_Adapter_DbTable(Zend_Registry::get('dbAdapter')); 
$adapter->setTableName('clients'); 
$adapter->setIdentityColumn('email'); 
$adapter->setCredentialColumn('password_hash'); 
// etc 

$client = $adapter->getResultRowObject(null, array('password_hash')); 
Zend_Session::rememberMe(604800); 
// store client object in the session 
$authStorage = $auth->getStorage(); 
$authStorage->write($client); 

Проблема с этим состоит в том, что getResultRowObject() возвращает объект с перепутались диакритиками. В моей базе данных есть кодировка UTF-8, а также все мои таблицы.

Таким образом, вместо:

Košice 

я получаю:

Košice 

Это, как я создаю адаптер DB:

protected function _initDb() 
{ 
    $this->configuration = new Zend_Config_Ini(APPLICATION_PATH 
               . '/configs/application.ini', 
               APPLICATION_ENVIRONMENT); 
    $this->dbAdapter = Zend_Db::factory($this->configuration->database); 
    Zend_Db_Table_Abstract::setDefaultAdapter($this->dbAdapter); 
    $stmt = new Zend_Db_Statement_Pdo($this->dbAdapter, 
             "SET NAMES 'utf8'"); 
    $stmt->execute(); 
} 
+0

Какая кодировка на вашей странице? –

ответ

1

Вы можете добавить в ваш config.ini a charset param, поэтому вам не нужно выполнять SET NAMES самостоятельно. У меня есть что-то подобное во всех моих ini's и работает нормально:

resources.db.adapter = mysqli 
resources.db.params.host = localhost 
resources.db.params.username = user 
resources.db.params.password = pass 
resources.db.params.charset = utf8 
resources.db.params.dbname = db 
Смежные вопросы