Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Il m'arrive un truc bizarre :
Je veux insérer une chaine encodée en Latin1 (mais avec UTF8 j'ai un pb similaire) dans un champ de type TEXT dans une base MYSQL.
Si cette chaine fait au plus 6522 caractères ça passe. Si elle en a 6523, ça fait planter le process PHP sans soulever aucune exception.
J'ai testé avec que des 'a' dans la chaine pour eliminer le pb de caractères speciaux.
Ca plante avec une connexion Zend_DB (que je prenne MYSQLI ou PDO_MYSQL comme Adapter) alors que si j'utilise une connexion mysqli "non ZF" (du style $db = new mysqli($host, $user, $passwd, $bdd); ), alors ça passe. Donc le code du ZF semble bien être la cause du pb.
Ma config :
Systeme : Linux Debian Etch 4.0
MySQL : 5.1.33
PHP : 5.2.9
ZF : 1.7.8
Le + bizarre c'est que sous windows (XAMPP avec PHP 5.2.8, Mysql 5.1.30, ZF 1.7.8) les chaines sont chargées sans problème. ... Ce qui semblerait innocenter le ZF cette fois !
Bref, je ne vois pas d'où peut venir le problème sous Linux. Les logs d'Apache, PHP ou MySQL ne fournissent pas d'infos permettant de tracker le pb.
Une idée ?
Si quelqu'un veut essayer de reproduire le test, voici le schema de la table utilisée et la fonction PHP :
Table :
CREATE TABLE `test_descriptif` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `descriptif` text COLLATE latin1_general_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci ;
Code PHP :
public function descriptifAction() { $this->view->title = "Test Descriptif"; // une connexion ZF avec un adapter MYSQLI ou PDO_MYSQL $db = Zend_Registry::get('dbtest'); // Pour tester avec une connexion mysqli : //$db = new mysqli('host', 'user', 'passwd', 'test_string'); $max = 6522; $text = ""; for($i=0;$i<$max;$i++) { $text .= 'a'; } $this->view->content = "1ere passe : mise en base de 6522 'a'<br/>"; $query = "INSERT INTO test_descriptif (descriptif) VALUES ('$text')"; try { $db->query($query); } catch (Exception $e) { $this->view->content .= "Caught exception: ".get_class($e)."<br/>Message: ".$e->getMessage()."<br/>"; } $this->view->content = "2eme passe : mise en base de 6523 'a'<br/>"; $text .= 'a'; $query = "INSERT INTO test_descriptif (descriptif) VALUES ('$text')"; try { $db->query($query); } catch (Exception $e) { $this->view->content .= "Caught exception: ".get_class($e)."<br/>Message: ".$e->getMessage()."<br/>"; } }
Dans le test ci-dessus, on enchaine un premier insert de 6522 'a' qui marche avec un 2eme insert de 6523 'a' qui plante chez moi, du moins sous Linux.
Hors ligne
Yep, un bogue interne à PHP probablement, il faudrait chercher avec gdb d'où ça vient, c'est bizarre ...
Hors ligne
Julien, as-tu fait le test de ton côté et si oui, arrives-tu au même resultat ?
Si c'était un bogue PHP, est-ce qu'on n'aurait pas aussi le même pb lorsqu'on utilise directement une connexion mysqli (sans passer pas l'adapter ZF) ?
Hors ligne
Pages: 1