Han*_*nes 11 php mysql zend-framework character-encoding zend-db
我正在使用Zend_DB并尝试将charset更改为utf8,这里是代码:
config.ini:
[development]
db.host = "localhost"
db.username = "root"
db.password = "toor"
db.dbname = "db_whoopdiedo"
db.charset = "utf8"
Run Code Online (Sandbox Code Playgroud)
bootstrap.php:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
public function _initAutoload()
{
Zend_Registry::set(
'config',
new Zend_Config_Ini(APPLICATION_PATH.'/configs/config.ini', 'development')
);
Zend_Registry::set(
'db',
Zend_Db::factory('Pdo_Mysql', Zend_Registry::get('config')->db)
);
Zend_Registry::get('db')->setFetchMode(Zend_Db::FETCH_OBJ);
Zend_Registry::get('db')->query("SET NAMES 'utf8'");
Zend_Registry::get('db')->query("SET CHARACTER SET 'utf8'");
}
}
Run Code Online (Sandbox Code Playgroud)
我认为在配置中添加charset就足够了,但是只有在我直接使用以下设置时才应用它:
Zend_Registry::get('db')->query("SET NAMES 'utf8'");
Zend_Registry::get('db')->query("SET CHARACTER SET 'utf8'");
Run Code Online (Sandbox Code Playgroud)
我的问题:有没有更好的方法来设置charset,也许配置明智?
Sur*_*dan 17
首先,我将你的数据库设置分解为它自己的init函数,如下所示:
/**
* Initiate Zend Autoloader
* @return Zend_Db_Adapter
*/
protected function _initDatabase()
{
$resource = $this->getPluginResource('db');
$db = $resource->getDbAdapter();
Zend_Registry::set("db", $db);
return $db;
}
Run Code Online (Sandbox Code Playgroud)
上面的示例使用资源作为Zend Framework中某些常见任务的预定义配置结构.只需在我的application.ini配置文件中包含以下内容,我们就可以在上面的Bootstrap中寻址资源'db':
resources.db.adapter = "pdo_sqlite"
resources.db.params.host = "localhost"
resources.db.params.username = "databaseuser"
resources.db.params.password = "mysecretpassword"
resources.db.params.dbname = APPLICATION_PATH "/data/db/ccymod.db"
resources.db.isDefaultTableAdapter = true
Run Code Online (Sandbox Code Playgroud)
这个例子适用于sqlite数据库,但MySQL看起来很相似,但是使用pdo_mysql并且dbname不是文件路径而是字符串.
有关资源的更多文档可在此处找到:
http://framework.zend.com/manual/en/zend.application.available-resources.html
现在使用资源配置部分agin我们可以添加以下行来设置数据库字符集,如下所示:
resources.db.params.charset = "utf8"
resources.db.params.driver_options.1002 = "SET NAMES utf8;"
Run Code Online (Sandbox Code Playgroud)
如果你仍然有问题,请看一下关于akrabat dot com的Rob Allen的zend框架教程博客文章以及关于ZF资源的UTF8和mysql设置的第45号以后的评论.