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 :

[PDO]erreur requête préparée [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 21
    Par défaut [PDO]erreur requête préparée
    Bonjour,
    je viens de démarrer en PHP/MySQL.

    J'ai donc tenté de faire une requête préparée, en imitant celle trouvée dans le tuto que je suis , et j'obtient l'erreur
    Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\malap\corps_description_materiel.php on line 22
    sans parvenir à obtenir le détail (alors que jusqu'à là, quand j'avais des bug sur les requêtes, j'arrivais à obtenir plus de détails).

    Voici le bout de code posant problème (c'est le début d'un fichier, inclus dans un fichier ne contenant pour l'instant que les entêtes et compagnie):
    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
    23
    24
    25
    26
    27
    28
    <?php //commun à la version normale et admin 
    	if (!isset($_GET['id_mat']) ) // l'url ne comprend pas le champ id_mat
    	{
    		?>
    			<p>Erreur : l'URL est invalide, il manque l'identifiant du matériel pour lequel il faut afficher le détail. <br/> <a href='liste.php'>Retourner à la liste du matériel</a> </p>
    		<?php
    	}
    	else // tout vas bien
    	{
    		$ID_mat=(int) $_GET['id_mat']; //on force id_mat à être (ou devenir) un int
    		try //on se connecte à la base de données : à modifier au moment de mettre sur le serveur
    		{
    			$bdd = new PDO('mysql:host=localhost;dbname=malap', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    		}
    		catch (Exception $e)
    		{
    			('Erreur : ' . $e->getMessage());
    		}
    		$req = $bdd->prepare('SELECT * FROM mat WHERE id_mat=?')or die(print_r($bdd->errorInfo()));
    		$reponseSQL_detail_mat = $req->execute(array($ID_mat)) or die(print_r($req->errorInfo()));
    		//$reponseSQL_detail_mat = $bdd->query('SELECT * FROM mat WHERE id_mat=1') or die(print_r($bdd->errorInfo()));
    		if ($infos=$reponseSQL_detail_mat->fetch())
    		{
    			$reponseSQL_detail_mat->closeCursor();
     
    			?>
    				<p> tout est en ordre </p>
    			<?php
    A savoir que je veille à bien mettre le paramètre un id_mat valide. Si je remplace les lignes 19 et 20 par la ligne 21 (mise en commentaire), alors je n'ai pas de problèmes (j'obtiens le message "tout est en ordre").

    Si quelqu'un pourrait m'indiquer où se trouve l'erreur (ou comment afficher le détail de l'erreur), je lui en serait très reconnaissant.

    En vous remerciant par avance
    Sandro

    PS : j'espère avoir fait le bon choix en plaçant le sujet ici plutôt que de le mettre dans PDO et d'indiquer MySQL en tag

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    $reponseSQL_detail_mat doit être un objet, non ?
    peux tu nous poster le résultat de echo gettype($reponseSQL_detail_mat);
    Dernière modification par rawsrc ; 18/11/2014 à 09h28. Motif: Balises [codeinline][/codeinline]

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 21
    Par défaut
    Bonjour,
    tout d'abord, merci pour ta réponse.
    En effet, c'est "normal" que ça ne marche pas, vue que $reponseSQL_detail_mat est un booléen au lei d'être un objet (j'ai vérifié, en remplaçant la requête préparée par celle en commentaire, j'obtiens bien le type objet. Reste à trouver pourquoi j'obtiens un booléen.
    Pour infos, $req est bien un objet et enlever les "or die(...)" ne change rien.

    En vous remerciant par avance pour votre aide
    bonne soirée
    Sandro

  4. #4
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    RTFM (Relis Ton Fier Manuel) : PDOStatement::execute

    $req->execute renvoie un booléen qui indique si la requête a réussi ou non. Pour obtenir le résultat de la requête, il faut appeler $req->fetch.
    PDOStatement::fetch
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 21
    Par défaut
    Merci beaucoup, en fait j'avais mal lu le tuto et fait une espèce de mélange entre les requêtes préparées et non préparées.
    Et bravo pour ta version du RTFM, c'est la première fois que je le vois en français.

    Pour le cas où quelqu'un aurait le même problème, je mets le code corrigé :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <?php //commun à la version normale et admin 
    	if (!isset($_GET['id_mat']) ) // l'url ne comprend pas le champ id_mat
    	{
    		?>
    			<p>Erreur : l'URL est invalide, il manque l'identifiant du matériel pour lequel il faut afficher le détail. <br/> <a href='liste.php'>Retourner à la liste du matériel</a> </p>
    		<?php
    	}
    	else // tout vas bien
    	{
    		$ID_mat=(int) $_GET['id_mat']; //on force id_mat à être (ou devenir) un int
    		try //on se connecte à la base de données : à modifier au moment de mettre sur le serveur
    		{
    			$bdd = new PDO('mysql:host=localhost;dbname=malap', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    		}
    		catch (Exception $e)
    		{
    			('Erreur : ' . $e->getMessage());
    		}
    		$req = $bdd->prepare('SELECT * FROM mat WHERE id_mat=?')or die(print_r($bdd->errorInfo()));
    		$req->execute(array($ID_mat));// or die(print_r($req->errorInfo()));
    		if ($infos=$req->fetch())
    		{
    			$req->closeCursor();
     
    			?>
    				<p> tout est en ordre </p>
    			<?php
     
    		}
    		else //cas où l'id_mat n'est pas valide
    		{
    			$req->closeCursor();
    			?>
    				<p>Erreur : l'URL est invalide, l'identifiant matériel indiqué n'existe pas. <br/> <a href='liste.php'>Retourner à la liste du matériel</a> </p>
    			<?php
    		}
    		?>
    			<h1> </h1>
    		<?php		
    	}
    ?>

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

Discussions similaires

  1. [PDO] Insert avec requête préparée, erreur champs datetime
    Par maxwell374 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/07/2011, 11h36
  2. [MySQL] Erreur dans requête préparée
    Par skandaboy dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/01/2011, 12h33
  3. [PDO] Requête préparée via PDO
    Par immat dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 15/10/2008, 14h01
  4. [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
  5. [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

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