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

PHP & Base de données Discussion :

Problème de requête préparée avec PDO [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Février 2005
    Messages : 242
    Points : 63
    Points
    63
    Par défaut Problème de requête préparée avec PDO
    Bonsoir,

    Je développe actuellement une application Web avec MySQL.

    j'utilise PDO pour me connecter à la base depuis PHP.
    je déclare ma requête avec comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $requete = $pdo->prepare("
    			SELECT lm. * , lp.grade, lp.nom, lp.prenom, ls.trigramme, ls.appellation
    FROM liste_missions AS lm
    LEFT JOIN liste_personnel AS lp ON lm.personne_id = lp.id
    LEFT JOIN liste_sites AS ls ON lm.site = ls.trigramme
    WHERE lm.date = ':date'
    AND lm.personne_id = ':personne'
    			");
    puis j'attribue les valeurs à l'aide de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete->bindValue(...)
    seulement la requête ne retourne aucun enregistrement alors que quand je fais :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT lm. * , lp.grade, lp.nom, lp.prenom, ls.trigramme, ls.appellation
    FROM liste_missions AS lm
    LEFT JOIN liste_personnel AS lp ON lm.personne_id = lp.id
    LEFT JOIN liste_sites AS ls ON lm.site = ls.trigramme
    WHERE lm.date = '2012-12-20'
    AND lm.personne_id = '2'

    j'ai le résultat attendu. (requête testé et approuvé avec phpmyadmin)

    Avez-vous une idée ? je n'ai aucun message d'erreur ni de PDO ni de MySQL donc je ne sais pas d'où ça vient.

    Merci d'avance.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Bonsoir,

    comment utilise tu bindValue() ?

    Et utilise tu la méthode execute() après ton bindValue()?

  3. #3
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Février 2005
    Messages : 242
    Points : 63
    Points
    63
    Par défaut
    Bonjour,

    J'utilise bindValue() comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $requete->bindValue(':date', $var_date);
    $requete->bindValue(':personne', $var_pers);
     
    $requete->execute();
    Jusqu'à présent cela a fonctionné avec toutes mes autres requêtes.
    Ce qui m'étonne c'est que la requête avec les valeurs directement incorporé fonctionne mais pas avec les variables.

    De plus je n'ai aucun message d'erreurs.

    Merci.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Est-ce que tu as contrôlé les deux variables et la requête réellement executé dans les logs (voir aussi si PDO te retourne les erreurs ou non).

  5. #5
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Février 2005
    Messages : 242
    Points : 63
    Points
    63
    Par défaut
    J'ai contrôlé les variables. Par contre pour voir dans les logs je sais pas trop comment on fait. Où se trouve ce fichier de log ?

  6. #6
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Février 2005
    Messages : 242
    Points : 63
    Points
    63
    Par défaut
    Je viens de faire un test :

    Quand j’incorpore directement les valeurs dans la requête, j'obtiens des résultats :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $requete = $pdo->prepare("
    			SELECT lm. * , lp.grade, lp.nom, lp.prenom, ls.trigramme, ls.appellation
    FROM liste_missions AS lm
    LEFT JOIN liste_personnel AS lp ON lm.personne_id = lp.id
    LEFT JOIN liste_sites AS ls ON lm.site = ls.trigramme
    WHERE lm.date = '2013-01-19'
    AND lm.personne_id = '2'
    			");
    mais quand je met des variables à l'intérieur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $requete = $pdo->prepare("
    			SELECT lm. * , lp.grade, lp.nom, lp.prenom, ls.trigramme, ls.appellation
    FROM liste_missions AS lm
    LEFT JOIN liste_personnel AS lp ON lm.personne_id = lp.id
    LEFT JOIN liste_sites AS ls ON lm.site = ls.trigramme
    WHERE lm.date = '$date'
    AND lm.personne_id = '$id_pers'
    			");
    Je n'obtiens rien. Et toujours aucun messages d'erreurs.

    J'avoue que je n'y comprends plus rien ^^. Une idée ?

    Merci d'avance.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    essaies d'attraper les exceptions et tu nous indiqueras l'erreur retournée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    try {
    		$requete = $pdo->prepare("
    			SELECT lm. * , lp.grade, lp.nom, lp.prenom, ls.trigramme, ls.appellation
    FROM liste_missions AS lm
    LEFT JOIN liste_personnel AS lp ON lm.personne_id = lp.id
    LEFT JOIN liste_sites AS ls ON lm.site = ls.trigramme
    WHERE lm.date = $date
    AND lm.personne_id = $id_pers
    			");
    $requete->bindValue(':date', $var_date);
    $requete->bindValue(':personne', $var_pers);
     
    $result=$requete->execute();
    if($result===FALSE)
    echo "requête non envoyée ";
    else 
    echo "requête envoyée ";
     
    } catch(PDOException $e) {
    	echo 'problème SQL : '.$e->getMessage());
    }
    Par ailleurs t'as pas besoin de mettre des quotes(') sur les variables de la requête

  8. #8
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Février 2005
    Messages : 242
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par armel18 Voir le message
    essaies d'attraper les exceptions et tu nous indiqueras l'erreur retournée.
    toujours aucune exception ni erreur retournée, cependant ...

    Citation Envoyé par armel18 Voir le message
    Par ailleurs t'as pas besoin de mettre des quotes(') sur les variables de la requête
    Voilà d'où venait le problème : en enlevant les (') dans la requêtes préparées j'ai le résultat attendu.

    La fonction prepare() est surement censé s'occuper de mettre les (') qui vont bien donc ça a du créer un conflit. En tout cas ça marche, vraiment une erreur toute bête =).

    Merci beaucoup.

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

Discussions similaires

  1. [Débutant] Problème requête préparée avec connections ODBC
    Par misterlagaffe dans le forum C#
    Réponses: 5
    Dernier message: 21/02/2012, 11h37
  2. [PDO] requête sql avec PDO impossible
    Par HALOMOTO dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/03/2009, 01h17
  3. [PDO] Problème de requête préparée (à n'y rien comprendre?)
    Par waldo2188 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 20/03/2007, 22h53
  4. Réponses: 5
    Dernier message: 10/07/2006, 13h05
  5. Problème de requête SQL avec instruction TRANSFORM
    Par Nosper dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/06/2005, 17h15

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