Erreur PDOStatement::execute() suite à une génération de bindParam()

Par yqpqhnuwKJstCm2susz, il y a 11 ans


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

yqpqhnuwKJstCm2susz, il y a 11 ans

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