如何使PDO适配器运行SET NAMES我每次连接,在ZendFramework时间UTF8。 我正在使用INI文件来保存适配器配置数据。我应该在那里添加什么条目?如何使PDO运行SET NAMES我每次连接时UTF8,在ZendFramework
如果它是不明确的,我在寻找正确的语法做在我的项目的config.ini文件,而不是在PHP代码,因为我认为配置这部分代码。
如何使PDO适配器运行SET NAMES我每次连接,在ZendFramework时间UTF8。 我正在使用INI文件来保存适配器配置数据。我应该在那里添加什么条目?如何使PDO运行SET NAMES我每次连接时UTF8,在ZendFramework
如果它是不明确的,我在寻找正确的语法做在我的项目的config.ini文件,而不是在PHP代码,因为我认为配置这部分代码。
Itay,
一个很好的问题。幸运的是,答案很简单:
database.params.driver_options.1002 = "SET NAMES utf8"
1002是恒定的PDO的价值:: MYSQL_ATTR_INIT_COMMAND
你不能在Zend_Db的获取config.ini
担心我google-fu
$pdo = new PDO(
'mysql:host=mysql.example.com;dbname=example_db',
"username",
"password",
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
第一击;)
在引导文件...
$db = Zend_Db::factory($adapter, $config);
$db->query("SET NAMES 'utf8'");
然后保存这种情况下您的注册表
Zend_Registry::set('db', $db);
连接使用常量这意味着它在第一个查询上连接。 如果你有一个没有查询的静态页面,它甚至不会连接 - 即使它在你的引导文件中被初始化。
这样运行:
$db->query("SET NAMES 'utf8'");
是没有那么聪明。 非常感谢他的解决方案dcaunt。
只是把这个在你的配置
database.params.charset = "utf8"
或ZF 1.11在此之后将努力 resources.db.params.charset = utf8
就是它
$table->getAdapter()->query('SET NAMES UTF8');
所有这些方法768,16工作,除了一些特殊情况。例如,如果你正在一台windows计算机上本地运行一个web服务器,使用php < 5.3.1,只有'manual'$ db-> query(“SET NAMES'utf8'”);在您的实际查询将工作之前。 任何其他尝试使用MYSQL_ATTR_INIT_COMMAND的方法都会失败。
这是我今天了解到,随着这个非常艰难的问题:
你不能指在某些环境PDO :: MYSQL_ATTR_INIT_COMMAND(即我的,具体我不知道)。你必须明确地使用1002代替
使用Zend Framework 1.11(可能从1.8版本开始,待确认),你不需要在配置文件中设置database.params.driver_options.1002 =“SET NAMES utf8”。 ini:resources.db.params.charset =“utf8”将足以让Zend_Db_Adapter_Pdo_Mysql为您做到这一点。
在windows上,您需要php> = 5.3.1才能使MYSQL_ATTR_INIT_COMMAND正常工作。
如果你用5.3.1或更高版本替换你的php版本(我也测试过5.3.3),你需要确保你的php.ini文件中的值设置为pdo_mysql.default_socket。默认的空值将不起作用(待确认:我读了一些关于此的内容,但在找出第5点后没有尝试没有它)
您还需要确保您有'127.0。 0.1本地主机”在您的WINDOWS \ SYSTEM32 \ DRIVERS \等\主机隐藏的系统文件(这是不是PHP 5.3.0有问题)
有了这一切记住,你应该能够从保存你自己一天搜索并保留你的头发! ;)
:-)我的google foo比较好,在发布之前发现这个,应该有这样的说法。 我会优化我的问题,我想在config.ini中做,而不是在php代码中。 – 2009-02-25 13:21:47
在那个常量中斜线逃脱的是什么? – Kzqai 2012-08-01 16:02:19