Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bien le bonjour tout le monde,
j'ai débuté récemment avec zend framework et je ne suis pas déçu des résultats obtenus.
mais j'ai un souci avec zend_db
j'ai créé un script automatisé qui importe des fichiers XML contenant des informations diverses.
ce script a très bien fonctionné sur 1784 fichiers
Mais il y en a un qui me donne du fil a retordre, il veut effectuer cette requête
2008-11-10T11:35:24+01:00 EMERG (0): Caught exception: SQLSTATE[HY093]: Invalid parameter number: no parameters were bound 2008-11-10T11:35:24+01:00 DEBUG (7): Mysql: Zend_Db_Profiler_Query::__set_state(array( '_query' => 'SELECT `textes`.`id` FROM `textes` WHERE ( emission_id = 6536 ) AND ( i_contenu LIKE "Louise et Blanche, sa mère, tiennent \\"L\'Etape\\", café restaurant d\'un petit village de Savoie. \\"L\'Etape\\" n\'est pas seulement un bistrot, c\'est aussi une nouvelle famille pour toute une ribambelle d\'enfants brisés que les deux femmes accueillent depuis toujours. Louise, à l\'humour dévastateur, croit au pouvoir des mots pour soigner les douleurs. Face à elles, se dresse \\" Le Virage \\", tenu par Lucie Chevrier et ses filles. La rivalité éternelle entre les deux établissements va s\'exacerber pendant la grève des camionneurs qui bloque le village. Et surtout par l\'irruption de Pierre, leader des routiers, dans la vie de toutes ces femmes, dans la vie de cette petite agglomération... Un mélange de bruit et de tendresse qui s\'appellerait de l\'amour. Et si la vie était à eux ?" )', '_queryType' => 32, '_startedMicrotime' => 1226313324.0412, '_endedMicrotime' => NULL, '_boundParams' => array ( ), ))
voilà la partie de mon débug concernée, a mon avis le souci se situe ici : "... Et si la vie était à eux ?"
il s'agirait juste du point d'interrogation qui est pris comme une variable alors que ce n'est pas le cas ...
donc si vous pouviez m'expliquer comment faire pour qu'il n'essaie pas de remplacer le point d'interrogation par une variable, je vous serai reconaissant.
Dernière modification par onigoetz (06-01-2009 09:42:35)
Hors ligne
il te faut utiliser quoteInto
A+
Hors ligne
Hello,
Le problème n'est pas l'insertion réelle des données mais l'interprétation du profileur. De là à dire, qu'il s'agisse d'un bug, il n'y a qu'un pas
A+
Hors ligne
Oulah, QuoteInto ... il m'a donné du fil a retorde lui aussi.
Dans ma base de données, il m'arrive a avoir a importer deux fois le même texte.
bien sûr, comme dans toute base de données j'évite les redondances.
donc avant d'insérer les données a nouveau, je recherche si elles existent.
au début j'ai simplement inséré ma chaine de caractère, vous vous en doutez, j'ai vite eu des soucis avec les ' et les " ...
j'ai ensuite découvert QuoteInto. mais là, si je relançais l'import du même fichier j'obtenais TOUS mes textes a double.
voilà le code que j'ai et qui fonctionne, sauf pour le cas que je vous ai décrit.
function q_textes($params) { $source = array('"'); $destin = array('\\"'); $sql = 'SELECT `textes`.`id` FROM `textes` WHERE ( emission_id = '.$params['emission_id'].' ) AND ( i_contenu LIKE "'.str_replace($source, $destin, $params['contenu']).'" )'; //$this->logg->debug("Mysql: " .$sql); $result = $this->bd->fetchRow($sql); if($result != false){ $id = $result->id; } else { $data = array( 'emission_id' => $params['emission_id'], 'tytexte_id' => $params["tytexte_id"], 'soustitre' => $params["soustitre"], 'contenu' => $params['contenu'], 'i_soustitre' => $params["soustitre"], 'i_contenu' => $params['contenu'] ); $this->bd->insert('textes', $data); $id = $this->bd->lastInsertId(); } return $id; }
Hors ligne
Et voilà.
Finalement c'est bien utile de lire la documentation ^^
J'ai utilisé QuoteInto, simplement cette fois je l'ai utilisé juste.
tout fonctionne dorénavant. merci
Hors ligne