таблицы в моей базе данных создаются с правильной UTF-8 кодировкой, как это:Zend_Db_Table UTF-8 символов
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
...
...
...
...
...
PRIMARY KEY (id)
) ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_slovak_ci;
Однако, когда я использую Zend_Db_Table для извлечения данных из таблицы с помощью этого метода:
public function getSingle($id)
{
$select = $this->select();
$where = $this->getAdapter()->quoteInto('id = ?', $id, 'INTEGER');
$select->where($where);
return $this->fetchRow($select);
}
Он возвращает объект с испорченными символами UTF-8 (преобразованный в iso-8859-1, я думаю).
Когда я смотрю в базе данных через phpmyadmin, он отображает все символы правильно, а также показывает правильную кодировку (UTF-8), поэтому я не знаю, где проблема.
Как я могу решить эту проблему?
UPDATE:
Так что я сделал это, и она работает:
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();
}
Есть ли лучший способ?
UPDATE2:
Я попытался это:
protected function _initDb()
{
$this->configuration = new Zend_Config_Ini(APPLICATION_PATH
. '/configs/application.ini',
APPLICATION_ENVIRONMENT);
$this->dbAdapter = Zend_Db::factory($this->configuration->database);
$this->dbAdapter = Zend_Db::factory($this->configuration->database->adapter,
$this->configuration->database->params->toArray()
+ array('driver_options' => array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")));
Zend_Db_Table_Abstract::setDefaultAdapter($this->dbAdapter);
}
И я получаю ошибку:
Fatal error: Undefined class constant 'MYSQL_ATTR_INIT_COMMAND' in C:\wamp\www\bakalarka\application\Bootstrap.php on line 46
Пожалуйста см мой ответ, по-другому, что вы могли бы найти более удобным. –
Спасибо, я попробую :) –
Не уверен, что это применимо к вашей настройке, но я просто прочитал несколько историй (http://www.google.com/search?q=MYSQL_ATTR_INIT_COMMAND) о ошибках PHP, где 'MYSQL_ATTR_INIT_COMMAND' является недоступен в некоторых версиях. :(Вы можете попробовать использовать конкретное значение '1002', но в некоторых сообщениях сообщается, что он также не работает. Или, может быть, вам следует обновить свою настройку. Не уверен, если вы считаете, что все это стоит всех. –