Oggi ho ricevuto un errore mentre stavo sviluppando un'applicazione basata su PHP, MySql e Zend Framework. Inoltre, sto usando phpseclib per crittografare i dati utilizzando lo AES algorithm e qui è venuto il problema. L'output dell'algoritmo AES è in una forma che a MySql non piace. Infatti, quando provo a inserire i dati nel database, ho ottenuto un'eccezione Sql. L'errore è:Mysql: errore generale: 1366 Valore stringa errato
SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xE4\xD5\xABtZM...' for column 'Name'
ho già letto tutte le risposte pubblicate su StackOverflow e hanno anche Googled il problema, ma tutti la soluzione proposta erano già nel mio codice. Database, tabelle e tutti i colle hanno Collation utf8_general_ci
. Qui sotto potete vedere il relativo codice:
- Application.ini per vedere come è impostato il collegamento
- database.php per vedere come posso recuperare la connessione al database
- model.php per vedere come provo per inserire i dati nel database
- cifrare() per vedere come io uso la classe AES per crittografare i dati
- definizione Table (Se sanno che tutti sono in utf8 non è sufficiente)
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);
cifrare()
public static function encrypt($Data, $EncryptionKey)
{
$AES = new Crypt_AES();
$AES->setKey($EncryptionKey);
return $AES->encrypt($Data);
}
tavolo
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;
Domanda: Come posso risolvere il problema e memorizzare i dati nel database?
domanda relativa http://stackoverflow.com/questions/7461962/mysql-how-to-store-aes-encrypted-data – hafichuk