Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Db
Zend_Db Forum d'entraide pour le composant Zend_Db du Zend Framework (création de requêtes, abstraction, ORM etc.). Avant de poster -> FAQ Zend_Db.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/05/2011, 10h19   #1
Invité de passage
 
Femme
Étudiant
Inscription : mai 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 2
Points : 1
Points : 1
Par défaut [Problème WHERE requête SQL]

Bonjour à tous,

J'utilise depuis peu le framework Zend, et j'ai une erreur que j'arrive absolument pas à résoudre. J'ai un accès à une base de donnée (qui marche) mais j'ai un problème de syntaxe dans ma clause WHERE apparement.

Je dispose de trois tables : formation, formateur et competence_formateur et je veux récupérer toutes les formations (suivant un paramètre de type rowformation (héritant de Zend_Db_Table_Row_Abstract)) et pour chaque formation je veux les infos des formateurs qui disposent des compétences.

J'ai effectuée la requête suivante:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$select = $this->select()->setIntegrityCheck(false)
->from(array('F' => 'formation','id_formation', 'code', 'sujet', 'categorie', 'duree'))
->join(array('cf' => 'competence_formateur', 'F.id_formation = cf.fk.formation','fk_formation'))
->join(array('f' => 'formateur', 'f.id_formateur = cf.fk_formateur',
     'id_formateur','nom','prenom', 'fonction', 'externe'))
 ->where('f.externe = false');
 
if(isset($rowformation->categorie))
{	
      $select->where('F.categorie LIKE %?%', $rowformation->categorie);
}
if(isset($rowformation->code))
{
     $select->where('F.code = ?', $rowformation->code);
}
if(isset($rowformation->sujet))
{
     $select->where('F.sujet = ?', $rowformation->sujet);
}
 
$select-> order('F.categorie');
return $this->fetchAll($select)->toArray();
rowformation est donnée par l'utilisateur dans sa recherche, et il se peut que certains paramètres n'existent pas, par exemple le code de la formation. La recherche peut se faire selon les critères code, sujet et categorie.

Le but donc de mes isSet et de vérifier si l'objet existe et si il existe alors j'ajoute la clause WHERE correspondante. Mais je reçois l'erreur suivante:

Message: SQLSTATE[42601]: Syntax error: 7 ERREUR: erreur de syntaxe sur ou près de « WHERE » at character 127

Qu'est ce qui ne va pas dans mon WHERE ?

Merci par avance pour votre réponse,

Lamary
lamary est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 11h58   #2
Invité de passage
 
Femme
Étudiant
Inscription : mai 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 2
Points : 1
Points : 1
Autant pour moi, j'ai résolu le problème.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$select = $this->select()->setIntegrityCheck(false)
                       ->from(array('f' => 'formation'))
                       ->join(array('cf' => 'competence_formateur'), 'f.id_formation = cf.fk_formation',
                       		array())                  
                       ->joinLeft(array('i' => 'formateur'), 'i.id_formateur = cf.fk_formateur',
                       		array('id_formateur','nom','prenom', 'fonction', 'externe'))
                       ->where('i.externe = false');	
 
        if(isset($rowformation->categorie))
        {			
			$select->where('f.categorie LIKE "%?%"', $rowformation->categorie);
		}
		if(isset($rowformation->code))
		{
			$select->where('f.code = ?', $rowformation->code);
		}
		if(isset($rowformation->sujet))
		{
			$select->where('f.sujet = ?', $rowformation->sujet);
		}		
		$select->order('f.categorie');         
 
		$result = $this->fetchAll($select)->toArray();
Il ne faut pas mettre de majuscule... et il faut bien mettre en place la jointure, notamment avec le 3eme paramètre !
lamary est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h12.


 
 
 
 
Partenaires

Hébergement Web