Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Salut,
J'ai l'impression de rencontrer un bug de fou avec la méthode fetchAll() et l'utilisation de l'ORM.
J'ai une table "News" mappée en ORM :
class Sql_News extends Zend_Db_Table_Abstract { protected $_primary = 'id_news'; protected $_name = 'news'; }
CREATE TABLE `news` ( `id_news` smallint(3) unsigned NOT NULL auto_increment, `libelle_news` varchar(250) NOT NULL, `contenu_news` longtext NOT NULL, `date_ajout` int(10) NOT NULL, `id_membre` smallint(3) unsigned NOT NULL, PRIMARY KEY (`id_news`), KEY `date_ajout` (`date_ajout`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
Elle contient une dizaine d'enregistrements.
En exécutant le code suivant :
<?php $db = new Zend_Db_Adapter_Mysqli($config); $db->getConnection(); $db->getProfiler()->setEnabled(true); Zend_Db_Table_Abstract::setDefaultAdapter($db); ... ... $table = new Sql_News(); $rowset = $table->fetchAll()->toArray(); ?>
les deux dernières lignes me donne, soit un crash Apache, soit une erreur 404. J'obtient d'autres crashs selon le contexte si je n'utilise pas toArray().
J'utilise WAMP 1.7.2 (avec PHP 5.2.3, Apache 2.2.4 et MySQL 5.0.41).
Est-ce un bug connu ? Je suis complètement désamparé face à ce bug et je ne sais pas encore si je dois incriminer ZF et sa soi-disante stabilité...
Une idée ?
Merci
Hors ligne
Bon, je me répond à moi-même, et confirme le fait que ça vient d'un beau bug du Zend Framework.
La cause vient de la nature du champ "contenu_news" de la table SQL :
CREATE TABLE `news` ( `id_news` smallint(3) unsigned NOT NULL auto_increment, `libelle_news` varchar(250) NOT NULL, `contenu_news` longtext NOT NULL, `date_ajout` int(10) NOT NULL, `id_membre` smallint(3) unsigned NOT NULL, PRIMARY KEY (`id_news`), KEY `date_ajout` (`date_ajout`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
Si c'est de type "longtext", ça plante.
Si je met en "mediumtext", erreur fatale PHP. Ca peut être résolu en mettant ini_set('memory_limit', '32M') au début du code, mais je sais pas trop si ça fait "propre" et optimisé... :
Allowed memory size of 8388608 bytes exhausted (tried to allocate 16777216 bytes) in [...]\ZendFramework-1.0.1\Zend\Db\Statement\Mysqli.php on line 227
Par contre si c'est de type "varchar" ou "text", tout marche...
Désolé pour l'inutilié apparente du topic, je vais aller inscrire ce problème dans le bug tracker du site du ZF
Hors ligne