gpt4 book ai didi

zend-framework - Zend_Db_Table UTF-8 字符

转载 作者:行者123 更新时间:2023-12-01 08:14:58 25 4
gpt4 key购买 nike

我的数据库中的表是使用正确的 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),所以我不知道问题出在哪里。

我该如何解决这个问题?

更新:

所以我这样做了并且有效:

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();
}

有没有更好的方法?

更新 2:

我试过这个:

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

最佳答案

您可以轻松地执行以下操作,而不是设置 driver_options。

你的 ini 文件:

db.adapter         = Pdo_Mysql
db.params.host = localhost
db.params.dbname = mydb
db.params.username = myuser
db.params.password = mypass
db.params.charset = UTF8

注意最后一个参数。然后使用 Zend_Config_Ini 读取你的配置:

$config = new Zend_Config_Ini('application.ini');

并将数据库参数作为配置子对象传递:

$db = Zend_Db::factory($config->db);

关于zend-framework - Zend_Db_Table UTF-8 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2247429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com