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 :

requête préparée provoque un échec [PDO]


Sujet :

PHP & Base de données

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut requête préparée provoque un échec
    Bonsoir,

    si je fais une requête normale, ça se passe bien :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql="INSERT INTO `medecin` (ausc_vasc,non_fait,id_patient) VALUES ('".$_POST['ausc_vasc']."','".$_POST['non_fait']."','".$_SESSION['patient']."')";
    $connexion->exec($sql);
    alors qu'avec une requête préparée non :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $sql="INSERT INTO `medecin` (ausc_vasc,non_fait,id_patient) VALUES ('".:ausc_vasc."','".:non_fait."','".:id_patient)."')";
     
     
    $prep = $connexion->prepare($sql);
     
    //Associer des valeurs aux place holders
    $prep->bindValue(:ausc_vasc, $_POST['ausc_vasc'], PDO::PARAM_STR);
    $prep->bindValue(:non_fait, $_POST['non_fait'], PDO::PARAM_STR);
    $prep->bindValue(:id_patient, $_SESSION['patient'], PDO::PARAM_STR);	
     
    //Compiler et exécuter la requête
    $prep->execute();
    pas possible d'en dire plus, car si ça marche pas, erreur 500...

    Peut-on me dire ce qui ne va pas ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Membre actif
    Profil pro
    Responsable de service informatique
    Inscrit en
    Août 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 174
    Points : 232
    Points
    232
    Par défaut
    Bonsoir,

    Et en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $sql="INSERT INTO `medecin` (ausc_vasc,non_fait,id_patient) VALUES (:ausc_vasc,:non_fait,:id_patient)";
     
     
    $prep = $connexion->prepare($sql);
     
    //Associer des valeurs aux place holders
    $prep->bindValue(':ausc_vasc', $_POST['ausc_vasc'], PDO::PARAM_STR);
    $prep->bindValue(':non_fait', $_POST['non_fait'], PDO::PARAM_STR);
    $prep->bindValue(':id_patient', $_SESSION['patient'], PDO::PARAM_STR);

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    En fait, j'avais essayé ça avant : ça supprime l'erreur 500, mais page blanche et requête non exécutée...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Et oui faut pas reprendre un exemple mysql pour l'intégrer directement dans un exemple pdo, surtout pour les requêtes préparées puisque les requêtes préparées n'existaient pas avec mysql.
    L'intérêt des requêtes préparées est de créer une abstraction en créant une relation entre des marqueurs (symbol "?" ou symbolisés par des marqueurs nommés) et des variables. Et donc ces marqueurs ne sont pas des variables qu'il faudrait concaténer pour les inclure dans la requête (puisqu'on cherche précisément à ne pas inclure de variables directement dans la requête).

  5. #5
    Membre actif
    Profil pro
    Responsable de service informatique
    Inscrit en
    Août 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 174
    Points : 232
    Points
    232
    Par défaut
    Aucune erreur php ni sql ? Tu as bien paramétré les erreurs dans ton php.ini ?

    Tu es sûr que id_patient est un string ?

    Natso

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Et au niveau des erreurs pdo faudrait penser à regarder cette page et utiliser des blocs try/catch en ayant initialisé avec PDO::ERRMODE_EXCEPTION si tu veux t'y retrouver un peu mieux.

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    J'ai suivi vos conseils (et simplifié pour le debug) :
    Code php : 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
    23
    24
    25
    26
    27
    28
    29
    <?php
    error_reporting(E_ALL);
    ini_set('display_errors','1'); 
     
    try {
    	$PARAM_hote='---'; // le chemin vers le serveur
    	$PARAM_nom_bd='---';  // le nom de votre base de données
    	$PARAM_utilisateur='---';  // nom d'utilisateur pour se connecter
    	$PARAM_mot_passe='---';  // mot de passe de l'utilisateur pour se connecter
    	$connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
    	//$sql="INSERT INTO `medecin` (ausc_vasc,non_fait,id_patient) VALUES ('".:ausc_vasc."','".:non_fait."','".:id_patient)."')";
    $sql="INSERT INTO `medecin` (ausc_vasc,non_fait,id_patient) VALUES (:ausc_vasc,:non_fait,:id_patient)";
    /*	$connexion->exec($sql);
    	echo "sql=".$sql."<br/>";*/
     
    	$prep = $connexion->prepare($sql);
     
    	//Associer des valeurs aux place holders
    	$prep->bindValue(:ausc_vasc, "test", PDO::PARAM_STR);
    	$prep->bindValue(:non_fait,"test", PDO::PARAM_STR);
    	$prep->bindValue(:id_patient, "test", PDO::PARAM_STR);	
     
    	//Compiler et exécuter la requête
    	$prep->execute();
    } catch (PDOException $e) {
        echo 'Échec lors de la connexion : ' . $e->getMessage();
    }
    ?>
    Mais toujours pas de message d'erreur ni d'exécution de la requête...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  8. #8
    Membre actif
    Profil pro
    Responsable de service informatique
    Inscrit en
    Août 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 174
    Points : 232
    Points
    232
    Par défaut
    Euuuh,

    Où se trouve la connexion à la base ???

    http://fmaz.developpez.com/tutoriels...omprendre-pdo/
    Natso

  9. #9
    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
    Par contre ce n'est pas normal que cette page ne donne pas une erreur.
    Contrôle error_reporting dans ton phpinfo()
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Où se trouve la connexion à la base ???
    elle était passée à l'as par un mauvais copier-coller...

    Par contre ce n'est pas normal que cette page ne donne pas une erreur.
    Contrôle error_reporting dans ton phpinfo()
    22527 mais qu'est-ce que ça signifie ?

    (même en ayant remis la connexion, pas mieux...)
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  11. #11
    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
    Ca correspond à E_ALL & ~E_DEPRECATED, c'est à dire a peu prés tout.

    et display_error ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Il est à off, mais avec cette ligne ini_set('display_errors','1');, ça devrait aller, non ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  13. #13
    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
    Comme tu dis, "ça devrait".
    Mais comme visiblement ça ne le fait pas, essaie autrement.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #14
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    A part faire des requêtes non préparées (ça, ça marche), je vois pas...Tu ferais comment, toi ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  15. #15
    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
    On parle de l'affichage des erreurs là.
    Change le paramètre de ton serveur et vois si tu as bien les erreurs.
    Essaie de provoquer une erreur de syntaxe volontairement au besoin pour mieux visualiser le comportement.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  16. #16
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Comme mon code est sur un serveur et non en local (je souhaite pouvoir le montrer à d'autres personnes), je me suis tourné vers l'hébergeur pour agir sur le PHP.INI...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  17. #17
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Si tu es sur un mutualisé, l'hébergeur ne va pas modifier le php.ini - qui affecte tout le serveur - simplement pour tes beaux yeux ... tu pourras uniquement modifier certaines valeurs dans chaque page (comme tu l'a fais) ou dans un .htaccess.
    Mais en plus du display error qui est un réglage de type on/off, il faut regarder aussi error_reporting qui fixe le niveau des erreurs.

    Cela dit en phase de développement c'est quand même dommage que tu ne fasse pas des tests sur un serveur local, cela va quand même beaucoup, beaucoup plus vite.

  18. #18
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    des tests sur un serveur local
    C'est justement ce que je me suis dit...donc et quand j'aurai la solution je la donnerai ici.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

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

Discussions similaires

  1. [PDO] Affichage d'une requête préparée
    Par Tchupacabra dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/02/2010, 03h48
  2. [PDO] Requête préparée
    Par Yoshio dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 16/10/2007, 12h07
  3. [PDO] Requête préparée, retour d'erreur à masquer
    Par speedev dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/06/2007, 10h39
  4. [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, 21h53
  5. [PDO] Ma requêtes préparées me retourne false
    Par jeff_! dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 03/05/2006, 22h07

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