Сегодня у меня возникла ошибка, когда я разрабатывал приложение на основе PHP, MySql и Zend Framework. Более того, я использую phpseclib для шифрования данных с помощью AES алгоритм, и здесь возникла проблема. Результат алгоритма AES находится в форме, которая кажется MySql не нравится. Infact, когда я пытаюсь вставить данные в базу данных, получил Sql Exception. Ошибка:
SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xE4\xD5\xABtZM...' for column 'Name'
Я уже прочитал все ответы, опубликованные в Stackoverflow, а также проблемы с Googled, но все предлагаемое решение уже было в моем коде. База данных, таблицы и все столбцы имеют Collation utf8_general_ci
. Ниже вы можете увидеть соответствующий код:
- Application.ini, чтобы узнать, как настроено соединение.
- Database.php, чтобы узнать, как я получаю подключение к базе данных
- Model.php, чтобы увидеть, как я пытаюсь вставить данные в базу данных
- encrypt(), чтобы увидеть, как я использую класс 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;
Вопрос: Как я могу решить проблему и сохранить данные в базе данных?