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 :

Tester requête préparée [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 11
    Par défaut Tester requête préparée
    Bonjour,

    je débute avec PDO ainsi qu'avec php tout court et je n'arrive pas à tester si une requête s'est correctement exécutée :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // connexion
    $connexion = new PDO('mysql:host='.DB_serveur.';port='.DB_port.';dbname='.DB_base, DB_user, DB_mdp);
     
    // requete preparee
    $prepare = $connexion->prepare('SELECT id, titre
    	                                     FROM categorie
    					     WHERE niveau = :niveau
    					     AND actif = 1 
    					     AND lien = :categorie');
     
    $prepare->execute(array(':niveau' => $niveau, ':categorie' => $categorie)); // execution

    La si j'affiche ce que l'exécution renvoie et que la requête soit bonne ou mauvaise, ça fait toujours 1

    Pourtant dans la doc, il est écrit :

    Valeurs de retour

    Cette fonction retourne TRUE en cas de succès, FALSE en cas d'échec.
    Bon soit, passons . Je n'ai pas vraiment trop d'autre choix que de continuer. Retournement d'un résultat improbable sous forme d'objet.

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $lignes = $prepare->fetch(PDO::FETCH_OBJ);

    La si j'affiche $lignes ça me renvoie soit l'objet, soit rien du tout (false ?) que je peux tester comme ceci :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if ($lignes !== FALSE) {
     
      echo 'tadam';
     
    }

    Ça reste moche mais ça marche. Ce que je ne parviens pas à saisir, c'est :

    -pourquoi il n'est pas possible de tester si execute() renvoie un résultat et de même pour query()?

    J'ai vu qu'il y avait un mode erreur PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING. ainsi qu'un mode exception PDO::ERRMODE_EXCEPTION. Est ce que ça peut me permette de tester plus proprement?

    Bref, comment vous faites?

  2. #2
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut

    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ($row = $prepare->fetch()) {
        var_dump($row);
    }
    et normalement ton $row devrait contenir un résultat à chaque fois. Il te suffit alors de pointer sur l'attribut de la ligne que tu souhaites récupérer.

  3. #3
    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
    Par défaut
    La si j'affiche ce que l'exécution renvoie et que la requête soit bonne ou mauvaise, ça fait toujours 1
    Je viens de faire le test est execute renvoit bien FALSE si la requete n'a pas pu s'executer.
    De quelle maniere controles-tu le résultat ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 11
    Par défaut
    Je fais un var_dump comme ceci :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $test = $prepare->execute(array(':niveau' => $niveau, ':categorie' => $categorie)); // execution
     
    var_dump($test);

    et je reçois toujours bool(true)

    Ma configuration serveur est :

    Version de Apache : 2.2.11
    Version de PHP : 5.2.8

    si ça peut aider. Je comprend vraiment pas le soucis.

  5. #5
    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
    Par défaut
    D'un autre côté, pourquoi veux-tu gérer une mauvaise requete par condition ?

    Je veux dire, il ne devrait y avoir aucun cas dans ton code qui produise une mauvaise requête
    A moins que tu n'écrives un exécuteur de requête, une requete erronée sanctionne une erreur majeure dans ton code et dois donc provoquer l'arret de celui-ci.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 11
    Par défaut
    Je fais cette requête pour récupérer une catégorie dans ma table. Les paramètres présent dans ma requête sont récupérés depuis une URL ce qui peut forcément entrainer des erreurs.

    J'aimerai bien provoquer l'arrêt du code ou même afficher une 404 si la requête est mauvaise.

    <edit>
    Je reçois bien false lorsque par exemple un paramètre est mal saisi (nom de la table, champs) mais si ma requête ne renvoie rien, je reçois true.
    </edit>

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

Discussions similaires

  1. [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
  2. [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
  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, 21h53
  4. [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
  5. [MySQL] Tester requête nulle ?
    Par Kotik dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/04/2006, 14h32

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