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 13/05/2011, 10h07   #1
Invité régulier
 
Homme
Développeur Web
Inscription : janvier 2009
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2009
Messages : 20
Points : 6
Points : 6
Par défaut Zend_Db_Select from plusieurs tables

Bonjour à tous,

J'ai un problème pour transcrire une requête SQL en utilisant Zend_Db_Select :

Voici la requête (qui fonctionne) :

Code :
1
2
3
4
5
6
7
 
SELECT * 
FROM Repondants,action 
WHERE action.id_rep='$idrep' 
AND Repondants.IDS=$idsurvey 
AND action.id_rep=Repondants.id_rep 
AND action.Date_Emission='$date_emission'
Voici comment je la traduit en utilisant Zend_Db_Select :

Code :
1
2
3
4
5
6
7
8
9
10
 
$filtre2 = "action.id_rep = ". $idrep . " AND repondants.IDS = " . $idsurvey . " AND action.id_rep = repondants.id_rep AND action.Date_Emission = " . $date_emission ;
 
       		$select = $db->select()
	             ->from('repondants')
	             ->from('action')
	             ->where($filtre2);
 
$action_rowset=$db->fetchall($select->query());
$action_rowcount= count($action_rowset);
Malheureusement, cela ne fonctionne pas, et voici le message d'erreur :

Citation:
Catchable fatal error: Object of class Zend_Db_Statement_Pdo could not be converted to string in C:\Zend\ZendServer\share\ZendFramework\library\Zend\Db\Statement.php on line 204
Je ne trouve rien de concluant sur internet...

Merci d'avance de votre précieuse aide
niusha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 15h17   #2
Invité régulier
 
Homme
Développeur Web
Inscription : janvier 2009
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2009
Messages : 20
Points : 6
Points : 6
J'ai résolu mon problème, voici la version corrigée de mon premier post qui fonctionne :

Code :
1
2
3
4
5
6
7
8
9
10
 
$filtre2 = "action.id_rep = ". $idrep . " AND repondants.IDS = " . $idsurvey . " AND action.id_rep = repondants.id_rep AND action.Date_Emission = '" . $date_emission . "'";
 
       		$select = $db->select()
	             ->from('repondants')
	             ->from('action')
	             ->where($filtre2);
 
	       	$action_rowset=$select->query()->fetchAll();
		$action_rowcount= count($action_rowset);
Erreur dans mon filtre, il manquait les ' ' autour de ma variable $date_emission qui est attendue en VARCHAR par la base de données

Erreur : ne pas utiliser $action_rowset=$db->fetchall($select->query()); mais comme je l'ai fait ci-dessus.
niusha est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 19/05/2011, 22h17   #3
Membre confirmé
 
Patrick Barroca
Inscription : mai 2008
Messages : 178
Détails du profil
Informations personnelles :
Nom : Patrick Barroca

Informations forums :
Inscription : mai 2008
Messages : 178
Points : 204
Points : 204
Hello,

Désolé mais ta solution présente quelques mauvais usages de Zend_Db_Select que je me sens obligé de te signaler

Les clauses where peuvent utiliser les mécaniques d'échappement sécuritaires pour peu qu'on les utilise.

Zend_Db sait joindre automatiquement les tables sans que tu ai a écrire la liaison dans une clause where.

Ca donne a peu près ça :
Code :
1
2
3
4
5
6
7
 
$db->select()->from('repondants')
                   ->joinUsing('action', 'id_rep')
                   ->where('action.id_rep = ?', (int)$idrep, Zend_Db::INT_TYPE)
                   ->where('repondants.IDS = ?', (int)$idsurvey, Zend_Db::INT_TYPE)
                   ->where('action.Date_Emission = ?', $date_emission)
                   ;
patbator 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 13h07.


 
 
 
 
Partenaires

Hébergement Web