mysqli_stmt::bind_result(): Anzahl der bind-Variablen entspricht nicht der Anzahl der Felder in vorbereitete Anweisung
Ich habe versucht, code ein login-Formular in PHP mit einem vorbereiteten statement, aber jedes mal wenn ich mich einloggen will bekomme ich die folgende Fehlermeldung:
mysqli_stmt::bind_result(): Anzahl der bind-Variablen entspricht nicht der Anzahl der Felder in vorbereitete Anweisung
Hier ist mein code:
<?php
session_start();
$mysqli = new mysqli("localhost", "root" , "" , "security");
if(mysqli_connect_errno()){
echo "Wrong" ;
}
if($stmt = $mysqli->prepare("SELECT username AND password FROM users WHERE username =? AND password =?")){
$username = $_POST['name'];
$password = $_POST['password'];
$stmt->bind_param('ss' ,$username ,$password);
$stmt->execute();
$stmt->bind_result($password ,$username);
if($stmt->fetch() == 'true')
{
echo "welcome";
} else{
echo "wrong password";
}
}
?>
Kann mir jemand sagen warum dies passiert ist?
Sie sind verbindlich 3 params und Sie in Ihrer Abfrage gibt es nur zwei.
In der Regel geschieht dies, wenn man der Abfrage SELECT * Sie hinzufügen oder entfernen " - Feld in der Tabelle. mit alter table.
In der Regel geschieht dies, wenn man der Abfrage SELECT * Sie hinzufügen oder entfernen " - Feld in der Tabelle. mit alter table.
InformationsquelleAutor user3114510 | 2013-12-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn das wirklich dein code ist, kann es sein, dass entweder $_POST["name"] oder $_POST["Passwort"] ist ein array, so dass bind_param bindet mehr als nur ein Wert.
Check:
InformationsquelleAutor tuxmania
Ihre select-syntax war falsch, die korrekte syntax ist
SELECT field1, field2, field3 FROM TABLE WHERE field1 = ? AND field2 = ?
Wählen Sie weitere Felder, einfach trennen Sie diese durch ein Komma und nicht einen
AND
Außerdem merke ich, dass Sie speichern Ihre Passwörter in Klartext, das ist eine schlechte Praxis betrachten hashing Ihnen zahlreiche Hash-Funktionen gibt, wie
sha1()
InformationsquelleAutor Ali