Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 28-04-2010 14:44:54

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

[Résolu] where qui fonctionne avec type int mais pas avec type String

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 :

Code:

$where = 'nom = '.$nom;
$resultSet = $this->getDbTable()->fetchAll($where);

Pas Erreur :

Code:

$where = 'idMarque = '.$idMarque;
$resultSet = $this->getDbTable()->fetchAll($where);

Erreur obtenu :

Code:

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 :

Code:

$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 hmm

Dernière modification par shadypierre (30-04-2010 02:10:37)

Hors ligne

 

#2 29-04-2010 16:54:21

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: [Résolu] where qui fonctionne avec type int mais pas avec type String

J'ai la pouasse je tombe que sur des problèmes impossible à résoudre ou quoi ? xD

Hors ligne

 

#3 30-04-2010 02:10:03

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: [Résolu] where qui fonctionne avec type int mais pas avec type String

Hors ligne

 

#4 30-04-2010 07:53:40

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Résolu] where qui fonctionne avec type int mais pas avec type String

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

Code:

$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.

Code:

$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

 

#5 30-04-2010 13:03:37

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: [Résolu] where qui fonctionne avec type int mais pas avec type String

Merci pour ces précisions ça fonctionne nickel maintenant big_smile

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages