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.

1 réponse


elhebert
Auteur
Réponse acceptée

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 !)