微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 为Zend_Db设置字符集的最佳方式(或至少比我目前在做的更好)

我使用Zend_DB并尝试将字符集更改为utf8,这里是代码

config.ini:

[development]
db.host = "localhost"
db.username = "root"
db.password = "toor"
db.dbname = "db_whoopdiedo"
db.charset = "utf8"

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'");
   }
}

我认为在配置中添加字符集是足够的,但是如果我直接使用它设置它,他只应用它:

Zend_Registry::get('db')->query("SET NAMES 'utf8'");
Zend_Registry::get('db')->query("SET CHaraCTER SET 'utf8'");

我的问题:是否有更好的方式设置字符集,也许配置明智?

首先,我会将数据库设置分解成它自己的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;
}

上述示例使用了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

这个例子是一个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;"

如果还有问题,请查看Rob Allen的zend框架教程博客文章,在akrabat dot com上以及关于ZF资源的UTF8和MysqL设置的第45号左右的注释.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐