SQLSTATE[42000]: Syntax error + Uncaught Error: Call to a member function prepa
Résolu/Fermé
danielos77
Messages postés
108
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
16 janvier 2024
-
19 mai 2020 à 18:56
jordane45 Messages postés 38446 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 février 2025 - 20 mai 2020 à 12:00
jordane45 Messages postés 38446 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 février 2025 - 20 mai 2020 à 12:00
A voir également:
- SQLSTATE[42000]: Syntax error + Uncaught Error: Call to a member function prepa
- Sqlstate[hy000] ✓ - Forum MySQL
- Sqlstate[42s22] - Forum PHP
- Sqlstate[hy000] [1040] too many connections ✓ - Forum MySQL
- Sqlstate[hy093]: ✓ - Forum PHP
- Erreur : SQLSTATE[42000] [1049] Unknown database 'LOGS' - Forum PHP
5 réponses
jordane45
Messages postés
38446
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 février 2025
4 737
19 mai 2020 à 19:12
19 mai 2020 à 19:12
Bonsoir,
Je ne sais pas si c'est que je suis fatigué.... mais ton texte est un charabia incompréhensible...
(désolé)
Quoi qu'il en soit, tu as deux erreurs
Une sur une requête SQL :
On peut supposer que c'est sur celle là
et donc, la réécrire un peut plus proprement
La seconde erreur semble indiquer que ta variable $bdd n'existe pas (ou est nulle )
Je constate d'ailleurs que tu la forces à null dans ton code.
Ce n'est clairement pas nécessaire.
Je ne sais pas si c'est que je suis fatigué.... mais ton texte est un charabia incompréhensible...
(désolé)
Quoi qu'il en soit, tu as deux erreurs
Une sur une requête SQL :
On peut supposer que c'est sur celle là
<?php //on récupère proprement la variable avant de l'utiliser $IDmodif = !empty($_POST['IDmodif']) ? $_POST['IDmodif'] : NULL; //echo $IDmodif; //préparation de la requête $sql = "SELECT * FROM Donnees WHERE ID =" . $IDmodif; //echo $sql; //tri des datas pour les avoir dans un tableau $datas = array(); // si pas de données à transmettre dans la requête.. mettre la variable à null //Execution de la requete try{ $req = $bdd->prepare($sql); $req->execute($datas); //on récupère les résultats $result = $req->fetchAll(); }catch(Exception $e){ // en cas d'erreur : echo " <br>Erreur ! ".$e->getMessage(); echo " <br>Les datas : " ; print_r($datas); }
et donc, la réécrire un peut plus proprement
//on récupère proprement la variable avant de l'utiliser $IDmodif = !empty($_POST['IDmodif']) ? $_POST['IDmodif'] : NULL; //echo $IDmodif; //préparation de la requête $sql = "SELECT * FROM Donnees WHERE ID = :IDmodif"; //echo $sql; //tri des datas pour les avoir dans un tableau $datas = array(":IDmodif"=>$IDmodif); //Execution de la requete try{ $req = $bdd->prepare($sql); $req->execute($datas); //on récupère les résultats $result = $req->fetchAll(); }catch(Exception $e){ // en cas d'erreur : echo " <br>Erreur ! ".$e->getMessage(); echo " <br>Les datas : " ; print_r($datas); }
La seconde erreur semble indiquer que ta variable $bdd n'existe pas (ou est nulle )
Je constate d'ailleurs que tu la forces à null dans ton code.
Ce n'est clairement pas nécessaire.
jordane45
Messages postés
38446
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 février 2025
4 737
19 mai 2020 à 22:47
19 mai 2020 à 22:47
<?php //activation de l'affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //echo "Test"; //on inclut le fichier de connexion à la bdd require_once "../secure/cnxBdd.php"; // le ONCE veut dire UNE FOIS .. donc ne le réinclus pas si tu refaire un require.... //on récupère proprement la variable avant de l'utiliser //$IDmodif = !empty($_POST['IDmodif']) ? $_POST['IDmodif'] : NULL; // si données envoyées en POST $IDmodif = !empty($_GET['IDmodif']) ? $_GET['IDmodif'] : NULL; // si données envoyées via l'url ( en GET ) //echo $IDmodif; //préparation de la requête $sql = "SELECT * FROM Donnees WHERE ID =:IDmodif" . ; //echo $sql; //tri des datas pour les avoir dans un tableau $datas = array(":IDmodif"=>$IDmodif); //Execution de la requete try{ $req = $bdd->prepare($sql); $req->execute($datas); //on récupère les résultats $result = $req->fetch(); //fetch si une seule ligne retournée par la requête / fetchAll si plusieurs lignes // Mise en forme des résultats pour les champs voulus if(!empty($result)){ $ID = $result['ID']; $SSA = $result['SSA']; $CMCAS = $result['CMCAS']; $Dept = $result['Dept']; } }catch(Exception $e){ // en cas d'erreur : echo "<br>".$sql; echo "<br>Erreur : " . $e->getMessage(); echo " <br>Les datas : " ; print_r($datas); } $update = false; //On vérifie qu'on a bien cliqué sur le bouton if (isset($_POST['Validation'])) { //on récupère proporement les variables $SSAmod = !empty($_POST['SSAmod']) ? $_POST['SSAmod'] : NULL; $CMCASmod = !empty($_POST['CMCASmod']) ? $_POST['CMCASmod'] : NULL; $Deptmod = !empty($_POST['Deptmod']) ? $_POST['Deptmod'] : NULL; $ID = !empty($_POST['ID']) ? $_POST['ID'] : NULL; //on affiche les variables juste pendant le développement echo ' SSA transmise : '.$_POST['SSAmod'].'<br>' ; echo ' CMCAS transmise : '.$_POST['CMCASmod'].'<br>'; echo ' Département transmis : '.$_POST['Deptmod'].'<br>'; echo ' ID utilisé pour le WHERE : '.$_POST['ID'].'<br>'; //$sth appartient la classe PDOStatement $sql = "UPDATE Donnes SET SSA = :ssa, CMCAS = :cmcas, Dept = :dept WHERE ID = :id"; try{ $sth = $bdd->prepare($sql); $sth->bindParam(':ssa', $_POST['SSAmod'], PDO::PARAM_STR); $sth->bindParam(':cmcas', $_POST['CMCASmod'], PDO::PARAM_STR); $sth->bindParam(':dept', $_POST['Deptmod'], PDO::PARAM_STR); $sth->bindParam(':id', $_POST['ID'], PDO::PARAM_INT); $result = $sth->execute(); $update = true; }catch(Exception $e){ echo "<br>".$sql; echo "<br>Erreur : " . $e->getMessage(); } } //$bdd = null; // Ferme la connexion // INUTILE ! ?> <form method="post" action=""> <p> </p> <p> </p> <p> <b><u><font size="5" color="red"> ATTENTION :</font></u></b> Les champs ne sont pas liés entre eux... Vous pouvez avoir SSA "Bourgogne" avec CMCAS "Corse" et Département "(08)". Cela est tout à fait normal car il s'agit de listes (liste des SSA, liste des CMCAS et liste des départements).<br> Par ailleurs, pour les départements, merci de laisser les parenthèses ! De toutes façons, il est peu probable d'avoir à changer quoique ce soit pour les départements ;-) </p> <p> </p> <p> <!-- Les valeurs sont affichées dans des inputs pour être modifiées si besoin --> <input type="hidden" name="ID" id="ID" value="<?php echo $ID; ?>" /> <!-- input hidden pour garder l'ID concerné lors de l'envoi --> <LABEL for="SSA">SSA : </LABEL> <input type="text" name="SSAmod" id="SSAmod" value="<?php echo $SSA; ?>" /> </p> <p> <LABEL for="CMCAS">CMCAS : </LABEL> <input type="text" name="CMCASmod" id="CMCASmod" value="<?php echo $CMCAS; ?>" /> </p> <p> <LABEL for="Dept">Département : </LABEL> <input type="text" name="Deptmod" id="Deptmod" value="<?php echo $Dept; ?>" /> </p> <input type="submit" name="Validation" value="Validez vos modifications"> <br> </form> <?php if($update==true){ echo '<br><br> <span style="font-size:14pt;"><font color="blue"> les modifications ont bien été prises en compte </font> </span>'; } ?>
danielos77
Messages postés
108
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
16 janvier 2024
2
19 mai 2020 à 20:05
19 mai 2020 à 20:05
Bonsoir Jordane45,
Désolé, j'avais seulement détaillé pour bien expliquer la situation. Comme quoi le trop est l'ennemi du bien.
Je ne comprends pas pourquoi la première requête indiquerait une erreur car les valeurs attendues sont bien là. Le message apparait seulement lorsque je valide pour la seconde requête liée au formulaire alors que la première est terminée et fermée (normalement).
Pour la seconde, je ne vois pas où je la force à NULL .. $bdd existe bien, elle est dans le fichier de connexion.
Merci quand même.
Bonne soirée.
Daniel
Désolé, j'avais seulement détaillé pour bien expliquer la situation. Comme quoi le trop est l'ennemi du bien.
Je ne comprends pas pourquoi la première requête indiquerait une erreur car les valeurs attendues sont bien là. Le message apparait seulement lorsque je valide pour la seconde requête liée au formulaire alors que la première est terminée et fermée (normalement).
Pour la seconde, je ne vois pas où je la force à NULL .. $bdd existe bien, elle est dans le fichier de connexion.
Merci quand même.
Bonne soirée.
Daniel
jordane45
Messages postés
38446
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 février 2025
4 737
19 mai 2020 à 20:26
19 mai 2020 à 20:26
Pourrais tu nous montrer le code COMPLET de ton fichier d'update (sans le séparer... tout d'un bloc... et tout le code html/php.. )
danielos77
Messages postés
108
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
16 janvier 2024
2
Modifié le 19 mai 2020 à 22:38
Modifié le 19 mai 2020 à 22:38
Bien sûr, le voici :
EDIT : Ajout des BALISES DE CODE
<?php //activation de l'affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //echo "Test"; //on inclut le fichier de connexion à la bdd require_once "../secure/cnxBdd.php"; //on récupère proprement la variable avant de l'utiliser $IDmodif = !empty($_POST['IDmodif']) ? $_POST['IDmodif'] : NULL; //echo $IDmodif; //préparation de la requête $sql = "SELECT * FROM Donnees WHERE ID =" . $IDmodif; //echo $sql; //tri des datas pour les avoir dans un tableau $datas = array(); //Execution de la requete try{ $req = $bdd->prepare($sql); $req->execute($datas); //on récupère les résultats $result = $req->fetchAll(); }catch(Exception $e){ // en cas d'erreur : echo " <br>Erreur ! ".$e->getMessage(); echo " <br>Les datas : " ; print_r($datas); } // Mise en forme des résultats pour les champs voulus if(!empty($result)){ foreach($result as $uneValue){ $ID = $uneValue['ID']; $SSA = $uneValue['SSA']; $CMCAS = $uneValue['CMCAS']; $Dept = $uneValue['Dept']; } } $req->closeCursor(); // Termine le traitement de la requête $bdd = null; // Ferme la connexion ?> <form method="post"> <p> </p> <p> </p> <p> <b><u><font size="5" color="red"> ATTENTION :</font></u></b> Les champs ne sont pas liés entre eux... Vous pouvez avoir SSA "Bourgogne" avec CMCAS "Corse" et Département "(08)". Cela est tout à fait normal car il s'agit de listes (liste des SSA, liste des CMCAS et liste des départements).<br> Par ailleurs, pour les départements, merci de laisser les parenthèses ! De toutes façons, il est peu probable d'avoir à changer quoique ce soit pour les départements ;-) </p> <p> </p> <p> <!-- Les valeurs sont affichées dans des inputs pour être modifiées si besoin --> <input type="hidden" name="ID" id="ID" value="<?php echo $ID; ?>" /> <!-- input hidden pour garder l'ID concerné lors de l'envoi --> <LABEL for="SSA">SSA : </LABEL> <input type="text" name="SSAmod" id="SSAmod" value="<?php echo $SSA; ?>" /> </p> <p> <LABEL for="CMCAS">CMCAS : </LABEL> <input type="text" name="CMCASmod" id="CMCASmod" value="<?php echo $CMCAS; ?>" /> </p> <p> <LABEL for="Dept">Département : </LABEL> <input type="text" name="Deptmod" id="Deptmod" value="<?php echo $Dept; ?>" /> </p> <input type="submit" name="Validation" value="Validez vos modifications"> <br> <?php //activation de l'affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //On vérifie qu'on a bien cliqué sur le bouton if (isset($_POST['Validation'])) { //on inclut le fichier de connexion à la bdd require_once "../secure/cnxBdd.php"; //on récupère proporement les variables $SSAmod = !empty($_POST['SSAmod']) ? $_POST['SSAmod'] : NULL; $CMCASmod = !empty($_POST['CMCASmod']) ? $_POST['CMCASmod'] : NULL; $Deptmod = !empty($_POST['Deptmod']) ? $_POST['Deptmod'] : NULL; $ID = !empty($_POST['ID']) ? $_POST['ID'] : NULL; //on affiche les variables juste pendant le développement echo ' SSA transmise : '.$_POST['SSAmod'].'<br>' ; echo ' CMCAS transmise : '.$_POST['CMCASmod'].'<br>'; echo ' Département transmis : '.$_POST['Deptmod'].'<br>'; echo ' ID utilisé pour le WHERE : '.$_POST['ID'].'<br>'; //$sth appartient la classe PDOStatement $sql = "UPDATE Donnes SET SSA = :ssa, CMCAS = :cmcas, Dept = :dept WHERE ID = :id"; echo $sql; try{ $sth = $bdd->prepare($sql); $sth->bindParam(':ssa', $_POST['SSAmod'], PDO::PARAM_STR); $sth->bindParam(':cmcas', $_POST['CMCASmod'], PDO::PARAM_STR); $sth->bindParam(':dept', $_POST['Deptmod'], PDO::PARAM_STR); $sth->bindParam(':id', $_POST['ID'], PDO::PARAM_INT); $result = $sth->execute(); }catch(Exception $e){ echo "Erreur : " . $e->getMessage(); } echo '<br><br> <span style="font-size:14pt;"><font color="blue"> les modifications ont bien été prises en compte </font></span>'; } $bdd = null; // Ferme la connexion ?> </form>
EDIT : Ajout des BALISES DE CODE
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
danielos77
Messages postés
108
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
16 janvier 2024
2
20 mai 2020 à 00:03
20 mai 2020 à 00:03
Merci beaucoup,
Finalement, mes requêtes n'étaient pas si mauvaises (j'avais pas de variable à l'intérieur) c'était plus la chronologie qui pêchait. Ceci étant, j'ai appris des choses supers.
1°) Qu'avec le require_once, il n'y avait plus besoin de le refaire pour les requêtes suivantes (je m'en doutais un peu mais dans le doute et comme cela ne me coutait rien...).
2°)J'utilisais fetchAll car je pensais que c'était dès qu'il y avait plusieurs valeurs même sur une seule ligne... tout faux Daniel sur ce coup là.
3°)J'ai découvert aussi que la requête pouvait être avant le html où on est sensé récupérer les données modifiées.
Merci encore pour l'aide apportée avec les explications
Daniel
Finalement, mes requêtes n'étaient pas si mauvaises (j'avais pas de variable à l'intérieur) c'était plus la chronologie qui pêchait. Ceci étant, j'ai appris des choses supers.
1°) Qu'avec le require_once, il n'y avait plus besoin de le refaire pour les requêtes suivantes (je m'en doutais un peu mais dans le doute et comme cela ne me coutait rien...).
2°)J'utilisais fetchAll car je pensais que c'était dès qu'il y avait plusieurs valeurs même sur une seule ligne... tout faux Daniel sur ce coup là.
3°)J'ai découvert aussi que la requête pouvait être avant le html où on est sensé récupérer les données modifiées.
Merci encore pour l'aide apportée avec les explications
Daniel
jordane45
Messages postés
38446
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 février 2025
4 737
20 mai 2020 à 12:00
20 mai 2020 à 12:00
1) Oui, il faut comprendre les instructions, pas juste les coller.
Et dans le doute, penser à regarder la documentation officielle de php
2) Idem que le (1)
3) Comme évoqué dans le lien que j'avais déjà dû te donner : https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
(et si je ne te l'avais pas encore donné... maintenant c'est chose faite )
Et dans le doute, penser à regarder la documentation officielle de php
2) Idem que le (1)
3) Comme évoqué dans le lien que j'avais déjà dû te donner : https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
(et si je ne te l'avais pas encore donné... maintenant c'est chose faite )