[RESOLU] besoin d'aide pour Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number

Petit nouveau ! | 3 Messages

31 oct. 2022, 15:30

Bonjour, je suis debutant en PHP et je n'arrête pas de tomber sur cette erreur :
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\xampp\htdocs\RNR\BDconf.php:48 Stack trace: #0 C:\xampp\htdocs\RNR\BDconf.php(48): PDOStatement->execute() #1 {main} thrown in C:\xampp\htdocs\RNR\BDconf.php on line 48

Est-ce que vous pouvez m'aider ?

Voici mon code :

Code : Tout sélectionner

<?php $DB_HOST = "localhost"; $DB_USER = "root"; $DB_PASS = ""; try{ $db = new PDO('mysql:host='.$DB_HOST.';charset=utf8mb4',$DB_USER,$DB_PASS); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); }catch(PDOException $e){ echo $e; }
Celui ci-dessus ce trouve dans un autre fichier nommé "DBconn.php".

Code : Tout sélectionner

<?php session_start(); include('DBconn.php'); global $db; // CURL $curl = curl_init("filrouge.'uha4point0'/V2/music/groupes"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $groupesinf = curl_exec($curl); if($groupesinf == false){ var_dump(curl_error($curl)); }else{ $groupesinf = json_decode($groupesinf, true); } $curl = curl_init("filrouge.'uha4point0.'/V2/music/albums"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $albumsinfo = curl_exec($curl); if($albumsinfo == false){ var_dump(curl_error($curl)); }else{ $albumsinfo = json_decode($albumsinfo, true); } curl_close($curl); // SQL $sqlInit = file_get_contents('RNR.sql'); // reload if(isset($_POST['reloadDatas'])){ //reset $request = $db -> prepare($sqlInit); $request -> execute(); //fill $Genres = array(); //groupes foreach($groupesinf as $groupes){ $requestgroupes = $db -> prepare('INSERT INTO groupes (nom, chanteur,origin) VALUES (:nom, :chanteur, :origin);'); $requestgroupes -> bindValue('nom', $groupes['nom']); $requestgroupes -> bindValue('annee', $groupes['chanteur']); $requestgroupes -> bindValue('note', $groupes['origin']); $requestgroupes -> closeCursor(); $requestgroupes -> execute(); //genre foreach($groupes['Genre'] as $G){ if(!in_array($G, $Genres)){ $requestG = $db -> prepare('INSERT INTO Genres (Genre) VALUES (:Genre);'); $requestG -> bindValue('Genre', $G); $requestG -> closeCursor(); $requestG -> execute(); array_push($Genres, $G); } //GenreGroupes $requestGenre = $db -> prepare('SELECT id FROM Genres WHERE Genre = :Genre'); $requestGenre -> bindValue('Genre', $G); $requestGenre -> closeCursor(); $requestGenre -> execute(); $result = $requestGenre -> fetch(); $requestGroupes = $db -> prepare('INSERT INTO GenreGroupes(groupesId, GenreId) VALUES (:groupesId, :GenreId);'); $requestGroupes -> bindValue('groupesId', $groupes['id']); $requestGroupes -> bindValue('GenreId', $result['id']); $requestGroupes -> closeCursor(); $requestGroupes -> execute(); } } //Albums foreach($albumsinfo as $Album){ $requestAlbums = $db -> prepare('INSERT INTO Heros (nom,id,GroupesID,pistes,artiste,couverture) VALUES (:nom, :id, :GroupesID, :pistes, :artiste, :couverture);'); $requestAlbums -> bindValue('nom', $Album['nom']); $requestAlbums -> bindValue('id', $Album['id']); $requestAlbums -> bindValue('GroupesID', $Album['groupes']); $requestAlbums -> bindValue('pistes', $Album['pistes']); $requestAlbums -> bindValue('artiste', $Album['artiste']); $requestAlbums -> bindValue('couverture', $Album['couverture']); $requestAlbums -> closeCursor(); $requestAlbums -> execute(); } echo '<script>alert("reloaded");</script>'; } // empty if(isset($_POST['emptyDatas'])){ $request = $db -> prepare($sqlInit); $request -> execute(); echo '<script>alert("emptyed");</script>'; } //delete if(isset($_POST['deleteDatas'])){ $request = $db -> prepare('DROP DATABASE IF EXISTS RNR;'); $request -> execute(); echo '<script>alert("deleted");</script>'; } ?> <html> <head> <meta charset = "utf-8"> <title>OSUML</title> </head> <body> <h1>DB's Pages</h1> <div class = "content"> <form method = "post"> <input type = "submit" name = "reloadDatas" value = "Reload" class = "reload"> <input type = "submit" name = "emptyDatas" value = "Empty" class = "empty"> <input type = "submit" name = "deleteDatas" value = "Delete" class = "delete"> </form> </div> </body> </html>

ynx
Mammouth du PHP | 586 Messages

31 oct. 2022, 17:43

Bonjour,

Quels sont les paramètres de ta requêtes sql ?
Quels sont les paramètres que tu bind à cette requête ?

Petit nouveau ! | 3 Messages

31 oct. 2022, 22:33

Bonjour,

Quels sont les paramètres de ta requêtes sql ?
Quels sont les paramètres que tu bind à cette requête ?
Je comprend pas trop de quoi tu parles mais tous ce qui à avec ce code c'est ceci.

Code : Tout sélectionner

DROP DATABASE IF EXISTS RNR; CREATE DATABASE RNR; use RNR; CREATE table Groupes( id INT NOT NULL AUTO_INCREMENT, nom varchar(30), chanteur VARCHAR(25), origin VARCHAR(30), PRIMARY KEY (id) ) ENGINE=InnoDB; CREATE TABLE Albums( id INT NOT NULL PRIMARY KEY, nom VARCHAR(30), GroupesId INT, FOREIGN KEY (GroupesId) REFERENCES groupes(id), pistes INT, artiste INT, couverture VARCHAR(200) ) ENGINE=InnoDB; CREATE TABLE Genres( id INT NOT NULL AUTO_INCREMENT, genre Varchar(30), PRIMARY KEY (id) ) ENGINE=InnoDB; CREATE TABLE GenreGroupes( GenreId INT NOT NULL, FOREIGN KEY (GenreId) REFERENCES Genres(id), GroupesId INT NOT NULL, FOREIGN KEY (GroupesId) REFERENCES groupes(id), PRIMARY KEY (GenreId,GroupesId) ) ENGINE=InnoDB;
je sais pas si ça peut aider mais si ce n'est pas ce que tu demandes, pourrait tu préciser ?

Mammouth du PHP | 2703 Messages

31 oct. 2022, 22:47

$requestgroupes = $db -> prepare('INSERT INTO groupes (nom, chanteur,origin) VALUES (:nom, :chanteur, :origin);');
$requestgroupes -> bindValue('nom', $groupes['nom']);
$requestgroupes -> bindValue('annee', $groupes['chanteur']);
$requestgroupes -> bindValue('note', $groupes['origin']);

sans cohérence, cela marche beaucoup moins bien.

Petit nouveau ! | 3 Messages

01 nov. 2022, 13:18

$requestgroupes = $db -> prepare('INSERT INTO groupes (nom, chanteur,origin) VALUES (:nom, :chanteur, :origin);');
$requestgroupes -> bindValue('nom', $groupes['nom']);
$requestgroupes -> bindValue('annee', $groupes['chanteur']);
$requestgroupes -> bindValue('note', $groupes['origin']);

sans cohérence, cela marche beaucoup moins bien.
Merci de ton aide effectivement c'est très bête de ma part j'ai reutilisé une partie de code d'un autre projet