PHP Invalid parameter number: number of bound variables does not match number of tokens

xep22

Banned
Registriert
Apr. 2018
Beiträge
395
hi,

ich habe folgenden Code um daten in eine Datenbank einzutragen geschrieben, ich finde einfach den Fehler nicht. was ist denn da mit Zahlen falsch ? In der datenbank ist ja alles mit VARCHAR...

PHP:
$statement=$pdo->PREPARE("INSERT INTO Kunden (anrede, vorname, nachname, email, strasse, hausnr, stadt, plz, bundesland, land, telefon, geburtstag) VALUES (:anrede, :vorname, :nachname, :email, :strasse, :hausnr, :stadt, :plz, :bundesland, :land, :telefon, :geburtstag)");
$statement->EXECUTE(array('anrede' => trim($_POST['anrede']), 'vorname' => trim($_POST['vorname']), 'nachname' => trim($_POST['nachname']), 'email' => trim($_POST['email']), 'strasse' => trim($_POST['strasse']), 'hausnr' => trim($_POST['hausnr']), 'stadt' => trim($_POST['stadt']), 'plz' => $_POST['plz'], 'telefon' => trim($_POST['telefon']), 'geburtstag' => date('Y-m-d', strtotime($_POST['geburtstag']))));
 

Anhänge

  • 2020-03-10_11.08.26.png
    2020-03-10_11.08.26.png
    37,1 KB · Aufrufe: 418
Wie wäre es mit Struktur?
PHP:
<?php
$statement = $pdo->prepare("
INSERT INTO Kunden (
  anrede,
  vorname,
  nachname,
  email,
  strasse,
  hausnr,
  stadt,
  plz,
  bundesland,
  land,
  telefon,
  geburtstag
) VALUES (
  :anrede,
  :vorname,
  :nachname,
  :email,
  :strasse,
  :hausnr,
  :stadt,
  :plz,
  :bundesland,
  :land,
  :telefon,
  :geburtstag
)");
$statement->execute( array(
    'anrede' => trim($_POST['anrede']),
    'vorname' => trim($_POST['vorname']),
    'nachname' => trim($_POST['nachname']),
    'email' => trim($_POST['email']),
    'strasse' => trim($_POST['strasse']),
    'hausnr' => trim($_POST['hausnr']),
    'stadt' => trim($_POST['stadt']),
    'plz' => $_POST['plz'],
    'telefon' => trim($_POST['telefon']),
    'geburtstag' => date('Y-m-d', strtotime($_POST['geburtstag']))
) );
Dann siehst du auch sofort, wo dein Problem liegt.

PS: Die Methoden werden klein geschrieben.
 
Die erste Zeile durchgezählt: 12 tokens
Die zweite Zeile durchgezählt: 10 bound variables

Also genau das, was auch die Fehlermeldung aussagt ... 12 ist ungleich 10.
 
Moin,

Du verlangst 12 Einträge, übergibst aber nur 10. Bundesland und Land fehlen im execute
 
Hallo Leute ich habe das gleiche Problem, bloß bei mir kann das nicht daran liegen:

<?php
require("inc/functions.inc.php");
require("inc/db.inc.php");
$stmt = $pdo->prepare("INSERT INTO messages
(name, straße_hnr, plz_ort)
VALUE(:name, :straße_hnr, :plz_ort) ");

$name="Tim";
$straße_hnr="Meierweg";
$plz_ort="München";

$stmt->bindParam(":name",$name,PDO::pARAM_STR );
$stmt->bindParam(":straße_hnr",$straße_hnr,PDO::pARAM_STR );
$stmt->bindParam(":name",$plz_ort,PDO::pARAM_STR );
$stmt->execute();
?>
<?php require("./parts/contact.php");?>

Wäre um jede Hilfe dankbar. Bei der DB ist alles auf VARCHAR.
Fehlermeldung.

Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\xampp\htdocs\Projekte\contact.php:17 Stack trace: #0 C:\xampp\htdocs\Projekte\contact.php(17): PDOStatement->execute() #1 {main} thrown in C:\xampp\htdocs\Projekte\contact.php on line 17
 
Doch, kann es. Und tut es. Namen sind keine Postleitzahlen und “:plz_ort” bleibt undefiniert.

protip, mal in Einwertigkeit einlesen, und/oder passendere Bezeichner verwenden. Entweder plz oder ort; das wären zwei Spalten, nicht eine.
 
  • Gefällt mir
Reaktionen: BonNino und Fombu
Code Tags sind schon ne nützliche Geschichte, wenn man sie denn nutzen würde...
 
  • Gefällt mir
Reaktionen: Physikbuddha
Ralph, danke dir. hat mich einen Schritt weiter gebracht. Hab zwar ne neue Fehlermeldung, aber um die kümmer ich mich jetzt.
 
Zurück
Oben