今天,我在开发基于 PHP、MySql 和 Zend Framework 的应用程序时遇到错误。此外,我正在使用phpseclib http://phpseclib.sourceforge.net/使用加密数据AES算法 http://en.wikipedia.org/wiki/Advanced_Encryption_Standard问题来了。 AES 算法的输出形式似乎是 MySql 不喜欢的。事实上,当我尝试将数据插入数据库时,出现了 Sql 异常。错误是:
SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xE4\xD5\xABtZM...' for column 'Name'
我已经阅读了 Stackoverflow 上发布的所有答案,并且还用 Google 搜索了该问题,但所有建议的解决方案都已在我的代码中。数据库、表和所有列都有排序规则utf8_general_ci
。下面你可以看到相关代码:
- Application.ini 查看如何建立连接
- Database.php 查看如何检索数据库连接
- Model.php 看看我如何尝试将数据插入数据库
- encrypt() 看看我如何使用 AES 类来加密数据
- 表定义(如果知道全部都是 utf8 格式还不够)
应用程序.ini
resources.db.adapter = "Pdo_Mysql"
resources.db.params.charset = "utf8"
resources.db.params.host = "localhost"
resources.db.params.username = "********"
resources.db.params.password = "********"
resources.db.params.dbname = "dbname"
数据库.php
public static function getDb()
{
if (self::$Db === NULL)
self::$Db = Zend_Db_Table::getDefaultAdapter();
return self::$Db;
}
模型.php
$Values = array(
'Id' => $this->Id,
'Name' => $this->Name,
'CreationDate' => $this->CreationDate,
);
$RowChanged = $Db->insert('TABLENAME', $Values);
加密()
public static function encrypt($Data, $EncryptionKey)
{
$AES = new Crypt_AES();
$AES->setKey($EncryptionKey);
return $AES->encrypt($Data);
}
table
CREATE TABLE IF NOT EXISTS `table` (
`Id` mediumint(8) unsigned NOT NULL,
`Name` varchar(200) DEFAULT NULL,
`CreationDate` date NOT NULL,
PRIMARY KEY (`Id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
问题:如何解决问题并将数据存储到数据库中?