Je sais que le titre est pas super super mais j'ai rien trouvé d'autre :D
Je suis en train de me faire une class Database et lors du test d'un insert j'ai cette erreur :
PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
Après un peu de recherche sur le net et quelque test dans mon script j'ai trouvé que mon erreur est causée par ce bout de code :
foreach ($this->bind as $k => $v) {
$query->bindParam($v[0], $v[1], $v[2]);
}
Car lorsque je créer les bindParam() à la main, je n'ai aucun soucis :
$name="Nom";
$fname="Prenom";
$query->bindParam(':firstname', $fname, \PDO::PARAM_STR);
$query->bindParam(':lastname', $name, \PDO::PARAM_STR);
Mon $this->bind est rempli grâce à :
$this->bind[] = ["':$k'", $v, $this->bindType[gettype($v)]];
et j'initialise bindType comme ceci :
private $bindType = [
"integer" => \PDO::PARAM_INT,
"string" => \PDO::PARAM_STR,
"boolean" => \PDO::PARAM_BOOL
];
Existe-t-il un moyen de ressoudre ce soucis tout en gardant mes bindParam() généré automatiquement ? Ou suis-je obligé des les faire à la main ?
Merci de votre aide.
J'ai résolu mon probème :)
C'était une bétise, lors du remplissage du mon tableau $this->bind j'utilisait :
$this->bind[] = ["':$k'", $v, $this->bindType[gettype($v)]];
Or je n'ai pas besoin des ' pour la premier valeur puisque c'est un String, donc j'ai juste eu à faire :
$this->bind[] = [":$k", $v, $this->bindType[gettype($v)]];
et mon problème à été reglé !
(Voilà ce qui arrive quand on code à 1h du matin ^^, on fais des erreurs toutes bêtes et on ne les trouvent pas !)