Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous, je souhaite utiliser une clause WHERE sur une de mes requetes de type fecthAll(), mais des que le champs concernant la clause n'est pas de type int j'obtiens une erreur.
Ex : si je fais un where id = 1 ça marche nickel, mais des lors que je fais un where nom = jean j'ai une erreur.
Erreur :
$where = 'nom = '.$nom; $resultSet = $this->getDbTable()->fetchAll($where);
Pas Erreur :
$where = 'idMarque = '.$idMarque; $resultSet = $this->getDbTable()->fetchAll($where);
Erreur obtenu :
Message: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Jean' in 'where clause'
J'ai essayé en modifiant la valeur de $where de cette façon :
$where = "'nom' = '$nom'";
et de plein d'autre façon différente mais je n'ai soit pas trouvé la bonne soit je n'utilise pas la bonne technique
Dernière modification par shadypierre (30-04-2010 02:10:37)
Hors ligne
J'ai la pouasse je tombe que sur des problèmes impossible à résoudre ou quoi ? xD
Hors ligne
La suite ici : http://www.developpez.net/forums/d91598 … pe-string/
Hors ligne
en complément à ma réponse sur develppez.com qui concernait php
je te poste celle-ci purement ZF
je suppose que tu as un objet connexion à ta base $db
$select = $db->select() ->from('maTable', array('colonne1','colonne2','colonne3','colonne4')) ->where('nom = :name'); $stmt = $db->prépare($select); $result=$stmt->fetchAll(array('name'=>$nom));
le prepare va seul préparer le mapping des paramètre nommés (:name) en fonction du type de la colonne
utiliser des paramètres nommés à la place de ? va te permettre de passer un tableau associatif de variables et donc de ne pas dépendre de l'ordre.
un exemple une requête dont une partie est ajouté en fonction d'une variable.
$select = $db->select() ->from('user', array('colonne1','colonne2','colonne3','colonne4')) ->where('nom = :name'); if ($withProfile) { $select->join('profiles', 'user.id = prolife.usr_id', array( 'hasProfile' => new Zend_Db_Expr ('profile.name = :profile') )); } $stmt = $db->prépare($select); if ($withProfile) { $result=$stmt->fetchAll(array('name'=>$nom, 'profile' => $profile)) } else { $result=$stmt->fetchAll(array('name'=>$nom)); }
Dans cet exemple si $withProfile est vrai tu as deux paramètres et dans mon écriture profile vient après name. en utilisant des paramètre "?" on serait tenté donc de passer un tableau contenant $nom puis $profile
mais en SQL la jointure se fait avant le where ZF réorganise automatiquement la requête il faut donc passer $profile puis $nom
avec les paramètres nommé tu n'as pas d'ordre à respecter.
A+JYT
Hors ligne
Merci pour ces précisions ça fonctionne nickel maintenant
Hors ligne
Pages: 1