Comment effectuer la requête preparee avec un select et un form
Résolu/Fermé
flexi2202
Messages postés
3801
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
21 octobre 2024
-
24 mai 2021 à 18:04
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 - 25 mai 2021 à 12:31
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 - 25 mai 2021 à 12:31
A voir également:
- Requete prepare sql php
- Easy php - Télécharger - Divers Web & Internet
- Gertrude a préparé la liste des affaires à prendre pour l'excursion. juliette a modifié cette liste en utilisant le mode suivi des modifications proposé par le traitement de texte. - Guide
- Sql lister les tables ✓ - Forum Programmation
- Blob sql ✓ - Forum Webmastering
- Erreur lors de l'envoi de la requête facebook marketplace - Forum Facebook
12 réponses
jordane45
Messages postés
38288
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 novembre 2024
4 703
Modifié le 24 mai 2021 à 19:58
Modifié le 24 mai 2021 à 19:58
Bonnour,
Deux cas de figure : Soit tu utilises les variables "nommées" :
Soit tu utilises les variables "non" nommées ( c'est à dire les points d'interrogation )
Dans les deux cas, il n'y a que DEUX variables qui changent pour faire la requête....
La variable $sql qui contient la requête SQL ( peu importe que ça soit un INSERT, un SELECT, un UPDATE, un DELETE .. )
Par exemple :
et la variable $datas qui contient, si il y en a dans ta requête, les variables à transmettre lors de l'exécution de la requête ( dans l'exemple, il y en a )
donc:
NB: Si tu n'as pas de variables dans ta requêtes, dans ce cas tu peux mettre $datas à null :
Voila, il ne faut rien toucher d'autre....
Deux cas de figure : Soit tu utilises les variables "nommées" :
//préparation de la requête et des variables $sql = "INSERT INTO matable (champ1,champ2) VALUES (:valeur1,:autrevaleur)"; $datas = array(':valeur1'=>$valeur1, ':autrevaleur'=>$valeur); //Execution de la requete try{ $requete = $bdd -> prepare($sql) ; $requete->execute($datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); }
Soit tu utilises les variables "non" nommées ( c'est à dire les points d'interrogation )
//préparation de la requête et des variables $sql = "INSERT INTO matable (champ1,champ2) VALUES (?,?)"; $datas = array($valeur1,$valeur); //Execution de la requete try{ $requete = $bdd -> prepare($sql) ; $requete->execute($datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); }
Dans les deux cas, il n'y a que DEUX variables qui changent pour faire la requête....
La variable $sql qui contient la requête SQL ( peu importe que ça soit un INSERT, un SELECT, un UPDATE, un DELETE .. )
Par exemple :
$sql = " SELECT * FROM matable WHERE unchamp=? ";
et la variable $datas qui contient, si il y en a dans ta requête, les variables à transmettre lors de l'exécution de la requête ( dans l'exemple, il y en a )
donc:
$datas = [ $unevariable ];
NB: Si tu n'as pas de variables dans ta requêtes, dans ce cas tu peux mettre $datas à null :
$datas = NULL;
Voila, il ne faut rien toucher d'autre....
yg_be
Messages postés
23327
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 novembre 2024
Ambassadeur
1 551
24 mai 2021 à 18:38
24 mai 2021 à 18:38
bonjour,
comme il n'y a aucune variable impliquée dans la requête, et que tu n'exécutes la requête qu'une seule fois, il n'y a pas d'avantage à préparer la requête.
par contre, je ne pense pas que le fetch() soit optionnel.
quel est le type du champ
comme il n'y a aucune variable impliquée dans la requête, et que tu n'exécutes la requête qu'une seule fois, il n'y a pas d'avantage à préparer la requête.
par contre, je ne pense pas que le fetch() soit optionnel.
quel est le type du champ
valider?
flexi2202
Messages postés
3801
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
21 octobre 2024
187
24 mai 2021 à 19:23
24 mai 2021 à 19:23
bonjour yg_be
merci pour l aide
j ai vraiment très dur avec des requêtes ...
car lorsque j insère des donnes dans une table je n exécute la requête qu une seule fois aussi
en fait il n y a pas de champ valider
je question la base de donnée pour connaître le nombre de commentaires
merci pour l aide
j ai vraiment très dur avec des requêtes ...
car lorsque j insère des donnes dans une table je n exécute la requête qu une seule fois aussi
en fait il n y a pas de champ valider
je question la base de donnée pour connaître le nombre de commentaires
flexi2202
Messages postés
3801
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
21 octobre 2024
187
24 mai 2021 à 20:15
24 mai 2021 à 20:15
bonjour jordane
cela est plus clair a présent
merci pour ce tuto est cette facilite déconcertante a expliquer les choses
dans mon exemple comme je n ai pas de variable le code serait le suivant
cela est plus clair a présent
merci pour ce tuto est cette facilite déconcertante a expliquer les choses
dans mon exemple comme je n ai pas de variable le code serait le suivant
$pdo = new PDO('mysql:host=localhost;dbname=u43e', 'u43erle', '2'); $sql = 'SELECT COUNT(*) AS nb FROM commentaire'; $datas = NULL; try{ $requete = $pdo -> prepare($sql) ; $requete->execute($datas) ; $result = $pdo->query($sql); $columns = $result->fetch(); $nb = $columns['nb']; echo 'Il y a ' . $nb . ' commentaires(s). <br/>'; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); }
jordane45
Messages postés
38288
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 novembre 2024
4 703
Modifié le 24 mai 2021 à 22:45
Modifié le 24 mai 2021 à 22:45
Mais ... que vient faire la ligne de code
là dedans... alors que je t'ai dit que RIEN ne devait être modifié dans cette partie du code ???
A la limite, le fetch et le echo peuvent se trouver dans le try .. mais perso, je te conseille de laisser le code que je t'ai donné tel quel .. et de placer tes autres instructions en dehors ..
PS: pour la connexion à la bdd... ne pas oublier d'activer l'affichage des erreurs PDO et de placer son code également dans un TRY/CATCH
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
$result = $pdo->query($sql);
là dedans... alors que je t'ai dit que RIEN ne devait être modifié dans cette partie du code ???
A la limite, le fetch et le echo peuvent se trouver dans le try .. mais perso, je te conseille de laisser le code que je t'ai donné tel quel .. et de placer tes autres instructions en dehors ..
$sql = 'SELECT COUNT(*) AS nb FROM commentaire'; $datas = NULL; // ------------------------------ // // CETTE PARTIE DU CODE NE CHANGE PAS // try{ $requete = $pdo -> prepare($sql) ; $requete->execute($datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } // ------------------------------ // $columns = $requete->fetch(); $nb = !empty($columns) ? $columns['nb'] : 0; echo "Il y a $nb commentaires(s) <br>";
PS: pour la connexion à la bdd... ne pas oublier d'activer l'affichage des erreurs PDO et de placer son code également dans un TRY/CATCH
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
flexi2202
Messages postés
3801
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
21 octobre 2024
187
24 mai 2021 à 22:44
24 mai 2021 à 22:44
merci pour la correction jordane c est vraiment sympa
j ai encore besoin de la ligne suivante pour obtenir la variable $result
concernant la connexion pas de soucis
c est très bien rentre
ainsi que la détection des erreurs a mettre au début du code
j ai encore besoin de la ligne suivante pour obtenir la variable $result
$result = $pdo->query($sql);
concernant la connexion pas de soucis
c est très bien rentre
ainsi que la détection des erreurs a mettre au début du code
jordane45
Messages postés
38288
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 novembre 2024
4 703
24 mai 2021 à 22:46
24 mai 2021 à 22:46
j ai encore besoin de la ligne suivante pour obtenir la variable $result
Non.
Il faut corriger le fetch par
$columns = $requete->fetch();
flexi2202
Messages postés
3801
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
21 octobre 2024
187
24 mai 2021 à 23:42
24 mai 2021 à 23:42
ah oui juste merci jordane j étais dans un autre code donc je suis ok avec la correction
j ai encore une question
je me retrouve dans mon code avec cet exemple ou je compte les lignes qui ont été validée dans ma base de donnée
je ne sais pas si je peux faire ainsi pour exécuter ma requête
j ai encore une question
je me retrouve dans mon code avec cet exemple ou je compte les lignes qui ont été validée dans ma base de donnée
$nRows = $pdo->query('select count(*) from commentaire WHERE valider=\'1\'')->fetchColumn();
je ne sais pas si je peux faire ainsi pour exécuter ma requête
//$nRows = $pdo->query('select count(*) from commentaire WHERE valider=\'1\'')->fetchColumn(); $nRows='select count(*) from commentaire WHERE valider=\'1\''->fetchColumn(); $datas = NULL; // ------------------------------ // // CETTE PARTIE DU CODE NE CHANGE PAS // try{ $requete = $pdo -> prepare($nRows) ; $requete->execute($datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } // ------------------------------ // echo 'dont ' . $nRows . ' commentaires(s) publies.
jordane45
Messages postés
38288
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 novembre 2024
4 703
25 mai 2021 à 00:20
25 mai 2021 à 00:20
Le prepare attend une string ...
La methode fetchcolumn fonctionne comme le fetch ... Tu ne l'as donc pas mis au bonne endroit
La methode fetchcolumn fonctionne comme le fetch ... Tu ne l'as donc pas mis au bonne endroit
flexi2202
Messages postés
3801
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
21 octobre 2024
187
Modifié le 25 mai 2021 à 00:42
Modifié le 25 mai 2021 à 00:42
merci jordane
pour la correction par contre et c est vrai que cela me semblait bizarre mais le code fonctionnait
voici la correction
pour la correction par contre et c est vrai que cela me semblait bizarre mais le code fonctionnait
voici la correction
//$nRows = $pdo->query('select count(*) from commentaire WHERE valider=\'1\'')->fetchColumn(); $sql='select count(*) AS nb from commentaire WHERE valider=\'1\''; //j utilise AS nb pour compter le nombre d enregistrement qui sont mis sur valider 1 $datas = NULL; // ------------------------------ // // CETTE PARTIE DU CODE NE CHANGE PAS // try{ $requete = $pdo -> prepare($sql) ; $requete->execute($datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } // ------------------------------ // //echo 'dont ' . $nRows . ' commentaires(s) publies. $columns = $requete->fetch(); $nb = !empty($columns) ? $columns['nb'] : 0; echo "Il y a $nb commentaires(s) <br>";
flexi2202
Messages postés
3801
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
21 octobre 2024
187
25 mai 2021 à 01:00
25 mai 2021 à 01:00
si cela est ok je vais pouvoir passer tout mon code en pdo et ne pas utiliser les deux codes
car au début je ne connaissais pas la différence des deux
car au début je ne connaissais pas la différence des deux
flexi2202
Messages postés
3801
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
21 octobre 2024
187
25 mai 2021 à 10:08
25 mai 2021 à 10:08
voila je viens enfin de trouver
$pdo = new PDO('mysql:host=localhost;dbname=id15003105_test', 'root', ''); $sql = 'select valider from commentaire WHERE valider=\'1\''; $datas = NULL; // ------------------------------ // // CETTE PARTIE DU CODE NE CHANGE PAS // try{ $requete = $pdo -> prepare($sql) ; $requete->execute($datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } // ------------------------------ // $rows = $requete->fetchAll(); $num_rows = count($rows); echo "Il y a $num_rows commentaires valider<br>";
jordane45
Messages postés
38288
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 novembre 2024
4 703
25 mai 2021 à 11:10
25 mai 2021 à 11:10
Les deux se valent.
Par contre tu n'as pas conservé le ternaire que j'avais mis.. c'est dommage..
Par contre tu n'as pas conservé le ternaire que j'avais mis.. c'est dommage..
flexi2202
Messages postés
3801
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
21 octobre 2024
187
25 mai 2021 à 11:14
25 mai 2021 à 11:14
bonjour Jordanne
merci pour la réponse
oui je viens de faire des essais et cela fonctionne
je ne comprends pas cette phrase
peux tu m expliquer stp
Par contre tu n'as pas conservé le ternaire que j'avais mis.. c'est dommage..
parles tu de ceci
merci pour la réponse
oui je viens de faire des essais et cela fonctionne
je ne comprends pas cette phrase
peux tu m expliquer stp
Par contre tu n'as pas conservé le ternaire que j'avais mis.. c'est dommage..
parles tu de ceci
$columns = $requete->fetch(); $nb = !empty($columns) ? $columns['nb'] : 0; echo "Il y a $nb commentaires(s) <br>";
jordane45
Messages postés
38288
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 novembre 2024
4 703
25 mai 2021 à 12:06
25 mai 2021 à 12:06
de ceci
Qui, dans ton nouveau code devient
Et si tu ne sais pas ce qu'est un TERNAIRE ... ou .. l'écriture TERNAIRE en programmation ... https://www.google.com/search?q=php+ternaire
$nb = !empty($columns) ? $columns['nb'] : 0;
Qui, dans ton nouveau code devient
$num_rows = !empty($rows) ? count($rows) : 0;
Et si tu ne sais pas ce qu'est un TERNAIRE ... ou .. l'écriture TERNAIRE en programmation ... https://www.google.com/search?q=php+ternaire
flexi2202
Messages postés
3801
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
21 octobre 2024
187
Modifié le 25 mai 2021 à 12:16
Modifié le 25 mai 2021 à 12:16
merci jordane
je suis allé voir sur le lien et je viens de comprendre merci
dans les deux codes que j ai poste et que tu as approuve il n y a pas de
dans le premier code je fais ceci
sauf erreur
je suis allé voir sur le lien et je viens de comprendre merci
dans les deux codes que j ai poste et que tu as approuve il n y a pas de
$num_rows = !empty($rows) ? count($rows) : 0;
dans le premier code je fais ceci
$nb = !empty($columns) ? $columns['nb'] : 0;
sauf erreur
jordane45
Messages postés
38288
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 novembre 2024
4 703
25 mai 2021 à 12:24
25 mai 2021 à 12:24
dans le premier code je fais ceci
Tu n'as pas fait .... tu as juste copier/coller ce que je t'ai donné...
Et dans le second.. tu n'as pas été en mesure de le remettre en place...
Là encore, il te suffit de copier/coller ce que j'ai fait.
Ce qui me rassure.. c'est que désormais tu as compris....7
Tu sauras donc l'appliquer dans tous tes codes à l'avenir ... y compris dans la récupération "propre" des variables avant de les utiliser... tel que je te l'explique depuis plusieurs mois.
Pour rappel :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
flexi2202
Messages postés
3801
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
21 octobre 2024
187
25 mai 2021 à 12:31
25 mai 2021 à 12:31
merci pour le lien jordane
oui en effet j ai compris le principe enfin ...
y aura fallu du temps et de la patience de ta part
mais cela rentre cette fois
ma prochaine étape est de remplacer mon code mysqli en PDO
oui en effet j ai compris le principe enfin ...
y aura fallu du temps et de la patience de ta part
mais cela rentre cette fois
ma prochaine étape est de remplacer mon code mysqli en PDO