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 30/01/2012, 16h58   #1
Nouveau Membre du Club
 
Avatar de eaglesnipe
 
Homme Yoann Rousseau
Ingénieur Etudes et Développement
Inscription : janvier 2008
Messages : 46
Détails du profil
Informations personnelles :
Nom : Homme Yoann Rousseau
Localisation : France

Informations professionnelles :
Activité : Ingénieur Etudes et Développement
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2008
Messages : 46
Points : 35
Points : 35
Par défaut Bind des paramètres d'une requête

Bonjour à toutes et à tous !

Je viens vous exposer un petit problème que je rencontre et auquel je n'arrive pas à trouver de solutions satisfaisantes.

Lorsque je fais une requête simple comme la suivante, tout va bien.

Code :
1
2
3
4
5
6
 
$select = $db->select()
             ->from(...)
             ->where('i.date_begin > "?"', $date_begin);
 
return $db->fetchAll($select);
Jusque là, pas de soucis. Maintenant, ma requête utilise 2 (ou plus) variables. J'ai donc voulu mettre en place un binding de la manière suivante :

Code :
1
2
3
4
5
6
7
 
$select = $db->select()
             ->from(...)
             ->where('i.date_begin > ":date_begin" AND i.date_close < ":date_close"')
             ->bind(array(':date_begin' => $date_begin, ':date_close' => $date_close));
 
return $db->fetchAll($select);
Et là, plus rien ne va... Je n'ai aucune erreur, la requête s'exécute correctement. Je n'ai simplement pas le résultat escompté. J'ai en fait l'impression que mes dates sont remplacées par un datetime UNIX (1970-01-01)... Et je ne comprend absolument pas pourquoi...

Si je fixe mes variables en dur, de la manière qui suit, j'obtiens bien le bon résultat :

Code :
1
2
3
4
5
6
 
$select = $db->select()
             ->from(...)
             ->where("i.date_begin > '$date_begin' AND i.date_close < '$date_close'");
 
return $db->fetchAll($select);
Où est l'erreur ? La fonction bind est-elle mal utilisée ? Il y a-t-il une autre syntaxe, ou une autre manière de faire ? J'avoue être dans le flou...

Merci pour l'aide que vous pourrez m'apporter.
eaglesnipe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 15h08   #2
Nouveau Membre du Club
 
Avatar de eaglesnipe
 
Homme Yoann Rousseau
Ingénieur Etudes et Développement
Inscription : janvier 2008
Messages : 46
Détails du profil
Informations personnelles :
Nom : Homme Yoann Rousseau
Localisation : France

Informations professionnelles :
Activité : Ingénieur Etudes et Développement
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2008
Messages : 46
Points : 35
Points : 35
Bonjour !

Pour ceux qui seraient confrontés à la même problématique, j'ai finalement contourné le problème en utilisant la fonction quote du Zend Framework :

Code :
1
2
3
4
5
6
 
$d_b = $db->quote($date_begin, 'DATE');
$d_c = $db->quote($date_close, 'DATE');
$db->select()
   ->from(...)
   ->where("i.date_begin > $d_b AND i.date_close < $d_c")
En revanche, si quelqu'un a une justification sur le le mauvais fonctionnement/utilisation du bind, je serais curieux de savoir !

Bonne journée !
eaglesnipe 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 06h58.


 
 
 
 
Partenaires

Hébergement Web