Erreur pdo
Fermé
AlecWeab
Messages postés
3
Date d'inscription
jeudi 5 février 2015
Statut
Membre
Dernière intervention
13 février 2015
-
Modifié par Whismeril le 8/02/2015 à 12:00
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 10 févr. 2015 à 15:58
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 10 févr. 2015 à 15:58
A voir également:
- Erreur pdo
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Erreur g030 - Forum Bbox Bouygues
- J'aime par erreur facebook notification - Forum Facebook
2 réponses
jordane45
Messages postés
38396
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 janvier 2025
4 732
8 févr. 2015 à 12:38
8 févr. 2015 à 12:38
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
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
8 févr. 2015 à 20:06
8 févr. 2015 à 20:06
'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()); }
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
10 févr. 2015 à 15:58
10 févr. 2015 à 15:58
En complément, la même réponse en utilisant la méthode PDO::quote() :
$req1="SELECT * FROM personnels WHERE matricule_perso=" . $bdd->quote($mat); $resultat = $bdd->query($req1)