Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Keine Daten für Parameter in vorbereiteter Anweisung bereitgestellt

Sie haben nur vier Argumente durch die Steuerzeichenfolge "sssd" gebunden, aber Sie haben viele Parameter. Beim Binden von Variablen mit mysqli benötigen Sie für jeden Parameter ein Zeichen, zum Beispiel:

mysqli_stmt_bind_param($stmt, "sssdsssssssssdd", $firstname, $surname, $address, 
    $gender, $city, $province, $postalcode, $phone, $secondphone, $email, 
    $organization, $inriding, $ethnicity, $senior, $student);

(Ich gehe davon aus, dass senior und student ganze Zahlen sind und den Code „d“ benötigen.)

Sie müssen keine Ihrer Variablen mit mysqli_real_escape_string() behandeln – das ist der Sinn der Verwendung von Parametern. Wenn Sie auch maskieren, erhalten Sie buchstäbliche Backslash-Zeichen in Ihren Daten in der Datenbank.

Und Sie müssen auf keinen Fall htmlspecialchars() verwenden - Sie würden das bei der Ausgabe in HTML verwenden, nicht beim Einfügen in die Datenbank. Sie erhalten wörtliche Sequenzen wie & in Ihre Daten in der Datenbank.

Re Ihr nächster Fehler:

Dies wird durch Folgendes verursacht:

$result = mysqli_query($mysqli,$stmt);

Diese Funktion erwartet, dass das zweite Argument eine Zeichenfolge ist, eine neue SQL-Abfrage. Aber Sie haben diese Abfrage bereits vorbereitet, also brauchen Sie Folgendes:

$result = mysqli_stmt_execute($stmt);