Erreur pdo
                    
        
     
             
                    AlecWeab
    
        
    
                    Messages postés
            
                
     
             
            3
        
            
                                    Statut
            Membre
                    
                -
                                     
Pitet Messages postés 2845 Statut Membre -
        Pitet Messages postés 2845 Statut Membre -
        Bonjour, 
lorsque je charge ma page dans mon navigateur j'ai cette erreur:
Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\blog\testblog.php on line 30
j'ai bo chercher, je ne vois pas à quoi c'est du.
Voici le code qui pose problème:
EDIT: Ajout de la coloration syntaxique.
                
            
                
    
    
    
        lorsque je charge ma page dans mon navigateur j'ai cette erreur:
Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\blog\testblog.php on line 30
j'ai bo chercher, je ne vois pas à quoi c'est du.
Voici le code qui pose problème:
<?php
      
      if (isset($_POST['ok']))
      {
       $mat=$_POST['mat'];
       $req1="SELECT * FROM personnels WHERE matricule_perso=$mat";
       $resultat = $bdd->query($req1) or die(print_r($bdd->erroInfo())); ;
       while ($res1=$resultat->fetch())
       {
        $nom_p=$res1['nom_perso'];
        $prenom_p=$res1['prenom_p'];
        echo ' <tr>
           <td>Nom : $nom_p </td> 
          </tr>
          <tr>
           <td>Prenom : $prenom_p </td>
          </tr>' ;
       }
      }
      
     ?>
EDIT: Ajout de la coloration syntaxique.
        A voir également:         
- Erreur pdo
- Erreur 0x80070643 - Accueil - Windows
- Erreur 4201 france tv ✓ - Forum Réseaux sociaux
- Erreur 4101 france tv - Forum Lecteurs et supports vidéo
- J'aime par erreur facebook notification - Forum Facebook
- Code erreur f3500-31 ✓ - Forum Bbox Bouygues
2 réponses
                        
                    Bonjour,
En PDO on n'utilise pas le OR DIE.
Il est préférable d'utiliser des bloc TRY / CATCH.
Pour ton fichier de connexion à ta BDD :
Pour le lancement de ta requête
Par contre, pour ce qui concerne ton message d'erreur, il semblerait que la requête n'est retournée aucun résultat ou plutôt qu'elle est rencontré une erreur.....
- As tu testé ta requête en direct dans ta BDD ?
- Ton champ matricule_perso est de quel type ? (Numérique ? )
Sinon.. il vaut mieux l'entourer de quotes....
Fais un ECHO de ta requete
Puis lance la en direct dans ta base....
https://codes-sources.commentcamarche.net/faq/10778-heidisql-tester-ses-requetes-sql
 
 
                
                
    
                En PDO on n'utilise pas le OR DIE.
Il est préférable d'utiliser des bloc TRY / CATCH.
Pour ton fichier de connexion à ta BDD :
try {
    $bdd= new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $bdd->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
catch(Exception $e) {
    echo 'Exception -> ';
    var_dump($e->getMessage());
}
Pour le lancement de ta requête
try {
  $req1="SELECT * FROM personnels WHERE matricule_perso=$mat";
  $resultat = $bdd->query($req1) ;
}
catch(Exception $e) {
    echo 'Erreur Requete-> ';
    var_dump($e->getMessage());
}
Par contre, pour ce qui concerne ton message d'erreur, il semblerait que la requête n'est retournée aucun résultat ou plutôt qu'elle est rencontré une erreur.....
- As tu testé ta requête en direct dans ta BDD ?
- Ton champ matricule_perso est de quel type ? (Numérique ? )
Sinon.. il vaut mieux l'entourer de quotes....
matricule_perso='$mat' ";
Fais un ECHO de ta requete
$req1="SELECT * FROM personnels WHERE matricule_perso=$mat"; echo "requête : <br>".$req1;
Puis lance la en direct dans ta base....
https://codes-sources.commentcamarche.net/faq/10778-heidisql-tester-ses-requetes-sql
                        
                    'lut, avertissement sympa de ma part:
si j'accède à
Les conseils de jordane45 sont de bonne foi mais pas suffisants: mettre un string entre guillemets ne suffit pas à contrer une injection SQL.
PDO possède les requêtes préparées, il faut donc s'en servir, en définissant un paramètre (anonyme ou nommé, comme il n'y en a qu'un un anonyme est plus rapide a coder):
    
                si j'accède à
http://<ton IP>/blog/testblog.phpavec comme paramètre POST
mat=0; DROP TABLE personnels;, ta table
personnels(en plus d'avoir un nom mal orthographié) est fichue pour de bon.
Les conseils de jordane45 sont de bonne foi mais pas suffisants: mettre un string entre guillemets ne suffit pas à contrer une injection SQL.
PDO possède les requêtes préparées, il faut donc s'en servir, en définissant un paramètre (anonyme ou nommé, comme il n'y en a qu'un un anonyme est plus rapide a coder):
try {
    $req1 = $bdd->prepare("SELECT * FROM personnels WHERE matricule_perso=?");
    $resultat = $req1->execute(array($mat));
} catch(Exception $e) {
    echo 'Erreur Requete-> ';
    var_dump($e->getMessage());
}
                
                