Insert-Anweisung funktioniert nicht mit execute(array()) der PDO-Erweiterung
$stmt = $conn->prepare("INSERT INTO user VALUES ('',:username,md5(:password),'',1,'','',:email,'',0,0,'',:cover,:dateofbirthYear:dateofbirthMonth:dateofbirthDay,NOW(),:sex,:country)");
$stmt->execute(array(
':username' => $username,
':password' => $password,
':email' => $email,
':cover' => $cover,
':dateofbirthYear' => $dateofbirthYear,
':dateofbirthMonth' => $dateofbirthMonth,
':dateofbirthDay' => $dateofbirthDay,
':sex' => $sex,
':country' => $country
));
Für einige Grund diese insert-Anweisung nicht funktioniert. Ich bin ganz neu in PDO-also ich weiß nicht viel über Sie. Was mache ich falsch?
diese Aussage gibt mir diese Fehlermeldung :
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: Anzahl der gebundenen Variablen entspricht nicht Anzahl der Token' in /home/manga/public_html/new/registrieren.php:80 Stack trace:
#0 /home/manga/public_html/new/register.php(80): PDOStatement->execute(Array)
#1 {main} thrown in /home/manga/public_html/new/register.php auf Zeile 80
- "Ich habe nachgeschaut, der Fehler auf stackoverflow" Und haben Sie versucht, das denken über sich selbst nach?
- Wenn ich nicht, warum sollte ich die Frage hier?
- Sie sollten wirklich nicht verwenden
md5
, hash-Passwörter.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Sie vorbereitet haben, Ihre Abfrage in die falsche Richtung
Für das, was Sie versuchen, können Sie es auf diese Weise
Die genaue Fehlermeldung, die Sie haben ist:
Dies bedeutet, dass die Anzahl/Namen der Parameter, die Sie übergeben haben (die
array()
imexecute
) nicht übereinstimmt mit der Nummer/Namen der Parameter haben Sie in derprepare()
SQL-Abfrage.Wenn Sie vergleichen Sie das mit den anderen Fragen beinhalten
SQLSTATE[HY093]
Sie werden sehen, dass es oft im Zusammenhang mit dem code, der ist groß und schlecht formatiert, die ist schwer zu Lesen. Das macht es schwer, zu zählen. Und dann haben Sie aus versehen etwas und dann ist der Fehler passiert ist.Nur fix und fertig, zum Beispiel können Sie nicht machen einen parameter aus drei Namen:
Statt übergeben Sie einen parameter für den Geburtstag:
Können Sie auch Ihren code ein wenig besser lesbar:
Und dann haben Sie ein Sicherheits-problem mit dem Passwort-hash:
Stattdessen tun ordnungsgemäße Passwort-hashing finden Sie in der PHP-FAQ über Sicheres Passwort-Hashing.
md5()
. Wir haben auch einige gute Q&A hier auf der Seite über die, die, die gehen mehr in die details.Korrigiert vorbereitete Abfrage: