[RESOLU] SELECT -> SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

Petit nouveau ! | 2 Messages

23 oct. 2018, 16:15

Bonjour à toute la communauté PHP,

j'ai besoin d'aide pour récupérer les données que j'ai introduit dans une base de donnée avec une requête prépare. merci à vous tous !

voici mon fichier index.php :

Code : Tout sélectionner

<?php /** * Liste de route pour l'application Mini jeu de combat */ require './Views/template.php'; require './Controllers/Controller.php'; require './Entity/Personnage.php'; require './Models/playerModel.php'; require_once './Helpers/Db_connect.php'; if ( isset( $_GET['action'] ) ) { switch ($_GET['action']) { case $_GET['action'] == '/': $root = new Controller(); $root->indexController (); break; case $_GET['action'] == 'create': $root = new Controller(); $root->insertController ( $_POST['nom'] ); break; case $_GET['action'] == 'read': $root = new Controller(); $root->readController($_POST['nom']); break; case $_GET['action'] == 'update': $root = new Controller(); $root->updateController ($id); break; case $_GET['action'] == 'delete': $root = new Controller(); $root->deleteController ($id); break; default: $root = new Controller(); $root->indexController (); } }

Voici la class Controller (j'en suis à readController) :

Code : Tout sélectionner

<?php /** * Class qui gère les connexion avec la base de donnée * ------------------> $bdd; * */ class Controller { /** * * retourne l'index de l'application * */ public function indexController () { return ('../Views/template.php'); } /** * CONTRÔLE AVANT TRANSFERT DANS LA BASE DE DONNES * * @param String $nom */ public function insertController (String $nom) { if ( isset( $_POST['nom'] ) && $_POST['nom'] !== '' ) { $player = new Personnage( htmlspecialchars ( $nom ) ); $insert = new playerModel(); $insert->register ( $player ); } else { echo 'veuillez rentrer un nom valide '; } } /** * @param $nom si le nom existe dans la bdd */ public function readController (String $nom) { if ( isset( $_POST['nom'] ) && $_POST['nom'] !== '' ){ $isPlayerExist = new playerModel(); $isPlayerExist->getPlayer(htmlspecialchars ($nom)); }else{ echo 'veuillez rentrer un nom de joueur'; } } /** * Modifie une ligne de la bdd selon son Id et * modifie les champs */ public function updateController () { // } /** *Supprime une ligne de la bdd * selon Id */ public function deleteController () { // } }
Voici class DB_connect :

Code : Tout sélectionner

<?php /** * class qui établi une connexion avec la base de donnée. */ class Db_connect { private $bdd; /** * Db_connect constructor. */ public function __construct () { try{ $this ->bdd = new PDO('mysql:host=127.0.0.1;dbname=personnages;charset=utf8', 'root', ''); }catch (PDOException $e){ echo $e->getMessage (); } } /** * @return $bdd mixed */ public function getBdd () { if ($this->bdd instanceof PDO) { return $this->bdd; }else{ echo 'aucune connexion à la base de donnée disponible'; } } }
le problème que je rencontre est ICI !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
voici la class playerModel ---- je tourne en rond pour récupérer les champs de la requête getPlayer :

Code : Tout sélectionner

<?php /** * Class playerModel s'occupe des relations avec la base donnée. * */ class playerModel { /** * @param Object $player */ public function register (Object &$player) { $connection = new Db_connect(); $bdd = $connection->getBdd (); $req = $bdd->prepare ( "INSERT INTO players (nom, degats, experience) VALUES (:nom, :degats, :experience)" ); $req->bindValue ( ':nom', $player->getName () ); $req->bindValue ( ':degats', $player->getDegats () ); $req->bindValue ( ':experience', $player->getExperience () ); $isOk = $req->execute (); if ( $isOk ) { echo "Votre joueur vient d'être créé ! "; } else { echo "la création du joueur a rencontré un problème"; } } /** * @param $nom * @return */ public function getPlayer ($nom) { $connection = new Db_connect(); $bdd = $connection->getBdd (); $req = $bdd->prepare ( "SELECT * FROM personnages WHERE nom=:$nom" ); $req->bindParam (':nom', $nom,PDO::PARAM_STR); $data = $req->execute (); var_dump ($data); return ; } }

Petit nouveau ! | 2 Messages

23 oct. 2018, 23:28

C'était que j'avais dans la requete SQL ------- "SELECT * FROM personnages WHERE nom=:$nom"
au lieu de "SELECT * FROM personnages WHERE nom=:nom"