Я в своем первом проекте ZF и наткнулся на кирпичную стену с русскими иероглифами.
(см. мой оригинальный пост на StackOverflow здесь )
Я переключился на простой старый процедурный PHP, чтобы устранить его, и теперь я могу использовать небольшую помощь для внедрения моего решения в мой проект ZF.
<code>// in application.ini
resources.db.adapter = pdo_mysql
resources.db.params.host = localhost
resources.db.params.username = user
resources.db.params.password = pass
resources.db.params.dbname = db
resources.db.params.charset = UTF8
resources.db.params.driver_options.1002 = "SET NAMES utf8"
// in bootstrap
public function initDb(){ // For Testing ---->
/* Configures PDO to execute the 'SET NAMES UTF8;' SQL query just before any
other query. If no query is executed on your page, this will not be executed. */
$pdoParams = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;');
$params = array(
'host' => 'localhost', // TODO: get from application.ini
'username' => 'user', // TODO: get from application.ini
'password' => 'pass', // TODO: get from application.ini
'dbname' => 'db', // TODO: get from application.ini
'driver_options' => $pdoParams
);
try {
$db = Zend_Db::factory('PDO_MYSQL', $params);
Zend_Db_Table_Abstract::setDefaultAdapter($db);
} catch (Exception $e) {
exit($e->getMessage());
}
Zend_Registry::set('dbAdapter', $db);
}
// my data table gateway
class Model_DbTable_Books extends Zend_Db_Table_Abstract {
protected $_name = 'book';
protected $_primary = 'id';
}
// my controller action
public function listAction(){
$DbTableBooks = new Model_DbTable_Books();
$this->view->allBooks = $DbTableBooks->fetchAll();
}
// my view script
echo'<pre>'; print_r($this->allBooks); echo'
'; // Для тестирования ---->
[UPDATE]
Вот SQL для моей таблицы:
CREATE TABLE IF NOT EXISTS `book` (
`id` int(3) unsigned NOT NULL AUTO_INCREMENT,
`parentID` int(3) unsigned DEFAULT NULL,
`russian` varchar(24) NOT NULL,
`english` varchar(24) NOT NULL,
PRIMARY KEY (`id`),
KEY `parentId` (`parentID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3;
INSERT INTO `book` (`id`, `parentID`, `russian`, `english`) VALUES
(1, 0, 'Мэри имела', 'Mary had'),
(2, 0, 'Небольшой ягненок', 'a little lamb');
А вот процедурный код, который работает:
<code>/* SANDBOX */
if(!$link = mysql_connect('localhost','user','pass')) die('Could not connect: ' . mysql_error());
mysql_set_charset('UTF8',$link);
if (!$db = mysql_select_db('db', $link)) die ("Can't use $_DB : " . mysql_error());
$result = mysql_query('SELECT * FROM book');
while($row = mysql_fetch_assoc($result)) {
echo'<pre>';print_r($row);echo'
'; // Для тестирования ---->
}
mysql_close ($ ссылка);
[/ UPDATE]