IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Db PHP Discussion :

Zend_Db_Select from plusieurs tables [ZF 1.11]


Sujet :

Zend_Db PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Points : 17
    Points
    17
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :

    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

  2. #2
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    J'ai résolu mon problème, voici la version corrigée de mon premier post qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 178
    Points : 230
    Points
    230
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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)
                       ;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Le champ spécifié [machin] peut désigner plusieurs tables listées dans une clause FROM
    Par Athena Asamiya dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 26/08/2013, 14h08
  2. SELECT * FROM sur plusieurs tables
    Par soksabaidee dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/05/2010, 13h00
  3. Réponses: 1
    Dernier message: 15/04/2010, 08h10
  4. DELETE FROM plusieurs tables
    Par Khleo dans le forum Requêtes
    Réponses: 10
    Dernier message: 15/01/2010, 10h17
  5. Select from plusieurs tables
    Par leom4t dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/11/2009, 20h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo