今天我在開發基於PHP,MySql和Zend Framework的應用程序時出錯。此外,我正在使用phpseclib來加密數據,使用AES algorithm,這裏出現了問題。 AES算法的輸出是MySql不喜歡的形式。事實上,當我嘗試將數據插入數據庫時,得到了一個Sql異常。錯誤是:Mysql:常規錯誤:1366錯誤的字符串值
SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xE4\xD5\xABtZM...' for column 'Name'
我已經讀過發佈#2的所有答案,也用Google搜索這個問題,但所有提出的解決方案在我的代碼裏了。數據庫,表格和所有列都有排序規則utf8_general_ci
。下面你可以看到相關的代碼:
- 的application.ini來看看如何設置連接
- database.php中,看我怎麼檢索數據庫連接
- Model.php,看我如何努力在數據庫中插入數據
- 加密(),看我如何使用AES類數據
- 表定義加密(如果知道一切都是在UTF8是不夠的)
的application.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"
database.php中
public static function getDb()
{
if (self::$Db === NULL)
self::$Db = Zend_Db_Table::getDefaultAdapter();
return self::$Db;
}
model.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);
}
表
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;
問:我怎樣才能解決這個問題並且將數據存儲到數據庫中?
相關的問題http://stackoverflow.com/questions/7461962/mysql-how-to-store-aes-encrypted-data – hafichuk