AOP d'Erreur: “ Invalid parameter number: parameter n'a pas été définie”
Je suis en train d'utiliser un simple MySQL requête d'insertion avec les paramètres de la matrice de la forme. Il continue à me dire le nombre de paramètres sont mauvais. J'ai essayé ce qui suit, tous les producteurs de la même erreur:
$stmt3 = $link->prepare('INSERT INTO messages VALUES(null, :room, :name, :message, :time, :color)');
$stmt3->execute(array(':room' => $Clean['room'],':name' => $Clean['name'],':message' => $Clean['message'],':time' => $time,':color:' => $Clean['color']));
et
$stmt3 = $link->prepare('INSERT INTO messages VALUES(:null, :room, :name, :message, :time, :color)');
$stmt3->execute(array(':null' => null, ':room' => $Clean['room'],':name' => $Clean['name'],':message' => $Clean['message'],':time' => $time,':color:' => $Clean['color']));
ainsi que de déclarer les colonnes précisément à éviter l'insertion null:
$stmt3 = $link->prepare('INSERT INTO messages (room, name, message, time, color) VALUES(:room, :name, :message, :time, :color)');
$stmt3->execute(array(':room' => $Clean['room'],':name' => $Clean['name'],':message' => $Clean['message'],':time' => $time,':color:' => $Clean['color']));
C'est ma première fois en utilisant PDO (j'ai l'habitude d'utiliser mysqli, mais mon partagés actuel hôte n'a pas le plugin mysqlnd, m'empêchant d'utiliser prepare(), de sorte que toute la perspicacité de ce point de vue est apprécié.
OriginalL'auteur Morgan | 2012-06-15
Vous devez vous connecter pour publier un commentaire.
Le problème - et vous donnera un coup de vous-même - est avec
:color
.La clé du tableau de la valeur que vous êtes de passage pour que le marqueur lors de l'appel de
execute()
est nommé:color:
. Supprimer la fin:
(je suppose que c'était juste une faute de frappe de toute façon).Il m'a fallu quelques minutes. Parfois, vous avez juste besoin d'un regard neuf, c'est ce que nous sommes ici 😉
hehehe +1 pour les yeux frais! Belle prise de Dave
vous avez tout à fait raison. J'étais trop concentré sur elle pour attraper quelque chose que les petites. Merci beaucoup!
Juste mon 5 cents. J'ai eu le même problème avec cette erreur générique. Trouvé la solution après presque 1h dans la convention de nommage. Les noms de paramètre ne peut pas avoir un trait d'union ( -). Après avoir retiré les traits d'union tout fonctionne comme prévu!
OriginalL'auteur DaveRandom
J'ai peut-être faux, mais comme je sais que vous avez besoin pour ce faire:
Mais comme une question de préférence personnelle, j'ai toujours fait comme ça
Votre deuxième exemple est la façon dont je le faisais avec mysqli, mais j'aimerais vraiment le faire comme cela pour des raisons de lisibilité, et je suis tellement investi dans l'erreur, j'aimerais vraiment savoir quelle en est la cause maintenant.
-1, Cette réponse n'est pas tout à fait pertinente.
OriginalL'auteur Adi