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 :

FetchAll qui ne retourne rien [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 383
    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 383
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut FetchAll qui ne retourne rien
    Bonjour,

    j'interroge avec PDO une bdd MySQL et le FetchAll ne retourne rien alors que la requête testée dans PHPMyAdmin (avec une valeur correcte puisque requête préparée) est valide. Où est mon bug ?

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function aff_infos($str,$query,$marqueur,$qid,$id) {
    global $bdd;
     
    $qid = $bdd->prepare($query);
    $qid->execute(array($marqueur));
    $row=$qid->FetchAll(PDO::FETCH_ASSOC);var_dump($row);
    ...
    Et le var_dump est vide...(Un debug montre que toutes les variables sont correctes sauf $row)
    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
    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
    que vaut $query et pourquoi y a t'il un $qid passé en paramètre ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 383
    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 383
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $query='SELECT machines.name,machines.id,infotech.* FROM machines,infotech
    	  WHERE machines.id=:id AND machines.name=infotech.name' ;/*dans le cas où ça ne marche pas car j'appelle la fonction 2 fois et pour l'autre ça marche*/
    //$qid, c'était historique ; comme il ne sert plus à rien, je l'ai retiré :
    function aff_infos($str,$query,$marqueur,$id) {
    global $bdd;
    $qid = $bdd->prepare($query);
    $qid->execute(array($marqueur));var_dump($qid);
    ...
    Le problème reste...
    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
    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
    Que vaut $marqueur ? A quoi sert $id en paramètres ?

    Au passage une jointure s'écrit avec JOIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $query='SELECT machines.name,machines.id,infotech.* FROM machines
              JOIN infotech ON machines.name=infotech.name
    	  WHERE machines.id=:id';
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 383
    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 383
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Merci pour la correction de la requête.

    En te répondant, j'ai fait une petite correction qui a induit une régression. De ce fait, plus aucun appel à la fonction ne marche. Mais le problème reste le même :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $query = "SELECT * FROM `machines` where name=:name";//ultra simple donc plus de jointure
    $marqueur=array(':name'=>$selected_machine);
    Du reste, j'ai un peu modifié le code et $id n'est plus utilisée, donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function aff_infos($str,$query,$marqueur) {
    global $bdd;
    $qid = $bdd->prepare($query);
    $qid->execute(array($marqueur));
    ...
    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

  6. #6
    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
    $marqueur est déjà un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qid->execute($marqueur);
    Je serai très surpris que ce problème ne lève pas une erreur PDO ; sous reserve qu'on les active quand on debugue.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 383
    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 383
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Merci, et OK, c'est pas la première fois que tu me le rappelles et cela explique la régression mais il reste un problème :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $sql="SELECT machines.name,infotech.* FROM machines
    	 JOIN infotech ON machines.name=infotech.name WHERE machines.id=:id";//jointure correctement codée !
     
    $qid = $bdd->prepare($sql);
    $qid->execute($marqueur);//$marqueur=array(':id'=>$id);
     
    $qid = $bdd->prepare($sql);
    $qid->execute(array($id));
     
    $row = $qid->FetchAll(PDO::FETCH_ASSOC);var_dump($row);
    donne
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in C:\wamp\www\eis2\eis\page\include\aff_infos.php on line 39
    où la ligne 39 est ici la 6...
    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
    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
    Dans le $marqueur que tu nous as montré c'était :name et pas :id
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 383
    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 383
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Bonne remarque ; c'est pas le même et j'ai corrigé mon post #7...
    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

  10. #10
    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
    C'est plutôt ta deuxième execution qui pose problème puisqu'il n'y a pas le nom du paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $qid->execute(array(':id'=>$id));
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 383
    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 383
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Mais avant d'appeler le fonction, je fais l'affectation :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $marqueur=array(':id'=>$id);
    aff_infos($str,$query_info,$marqueur);
    C'est donc correct, 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

  12. #12
    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
    Tu peux nous donner le code exact et la ligne d'erreur exacte ?
    En 3 messages tu nous as donné 3 versions.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 383
    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 383
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Désolé de donner de la confusion :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //il n'y a que le paramètre $marqueur passé à la fonction qui soit lié à l'erreur
    $marqueur=array(':id'=>$id);
    aff_infos($str,$query,$marqueur);

    aff_infos.php :
    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
    <?php
    error_reporting(E_ALL);
    ini_set('display_errors','1'); 
    ?>
    <?php function aff_infos($str,$query,$marqueur) {
    global $bdd;
    ...
    $sql="SELECT machines.name,infotech.* FROM machines
    	 JOIN infotech ON machines.name=infotech.name WHERE machines.id=:id";
     
    $qid = $bdd->prepare($sql);
    $qid->execute($marqueur);
     
    $row = $qid->FetchAll(PDO::FETCH_ASSOC);
    ...
    génère l'erreur
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in C:\wamp\www\eis2\eis\page\include\aff_infos.php on line 39
    où la ligne 39 est ici la ligne 12.
    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

  14. #14
    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
    Essaie de debuguer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $qid->debugDumpParams();
    Je ne suis pas sur que ça marche quand l'execution ne fonctionne pas mais on peut essayer.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 383
    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 383
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Je viens d'essayer ; ça ne marche pas si je laisse $qid->execute et si je le commente, ça donne Params: 0 (pas étonnant mais pas instructif...)
    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

  16. #16
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 383
    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 383
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    J'ai une petite idée de contournement (en gros, passer le marqueur en paramètre semble échouer, car si je fais
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $name="jupiter";
    $marqueur=array(':name'=>$name);
    $qid = $bdd->prepare($query);
    $qid->execute($marqueur);
    ça marche donc je voudrais passer la clé + la variable (par exemple $key="':name'";$var=$name;) puis au début de ma fonction $marqueur=array($key=>$var);, mais si je fais
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $marqueur=array($key=>$var);
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in C:\wamp\www\eis2\eis\page\include\aff_infos.php on line 43
    Bon, je suis de nouveau avec :name car je suis sur l'autre fichier qui appelle ma fonction...
    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 confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 383
    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 383
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Je m'en suis finalement sorti en passant les 2 marqueurs par des variables de session :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $_SESSION['marqueur1']=$marqueur;
    $_SESSION['marqueur2']=array(':id'=>$id);
    aff_infos($str,$query,$id,$serveur);
    J'ai aussi du (pour autre chose) rajouter la variable $serveur.
    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

  18. #18
    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
    Ce n'est pas sérieux ce que tu fais.

    debugDumpParams() fonctionne très bien pour moi (PHP5.6) y compris quand je provoque une erreur sur les paramètres.

    Tu peux faire un debugage complet de l'execution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    try {
    	$sth->execute($marqueurs);
    }
    catch(PDOException $e) {
    	echo $e->getMessage() . '<br/>';
    	$sth->debugDumpParams();
    	echo '<br/>';
    	var_dump($marqueurs);
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  19. #19
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 383
    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 383
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Pourquoi ce n'est pas sérieux ? Ca a l'avantage de faire ce que je veux.
    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

  20. #20
    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
    Utiliser une session parce que tu n'arrives pas à passer proprement une variable dans une fonction ce n'est pas sérieux.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Select qui ne retourne rien
    Par hunter001 dans le forum SQL
    Réponses: 2
    Dernier message: 12/06/2007, 11h37
  2. fonction qui ne retourne rien, comment c'est possible ?
    Par lOeil dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 02/06/2007, 00h51
  3. Requête qui ne retourne rien
    Par afrique dans le forum Administration
    Réponses: 4
    Dernier message: 02/10/2006, 18h19
  4. [MySQL] Requête qui ne retourne rien
    Par baleiney dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/06/2006, 18h29
  5. SELECT qui ne retourne rien à cause d'anti-slash
    Par mikyfpc dans le forum Outils
    Réponses: 8
    Dernier message: 07/08/2005, 23h04

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