Meine HTML:
<form action="rent.php" method="post"><pre>
Email : <input type="text" name="email">
Message : <input type="text" name="msg_text">
<input type="submit" value="Rent it">
</pre></form>
Meine rent.php-Datei:
<?php
require_once 'login.php';
$conn = new mysqli($hn, $un, $pw, $db);
if ($conn->connect_error) {
die($conn->connect_error);
}
$query = "SET NAMES utf8";
$result = $conn->query($query);
if (!$result) {
die($conn->error);
}
$req = $conn->prepare('INSET INTO renter (email, msg_text) VALUES(?, ?)');
$req->execute(array($_POST['email'], $_POST['msg_text']));
header('Location: menu.php');
Wenn ich versuche zu senden, lautet mein Fehler: Schwerwiegender Fehler: Aufruf einer Member-Funktion execute () auf Boolean in C: ...\rent.php in Zeile 18
email, msg_text sind vom Typ varchar
mysqli->prepare
kann auch FALSE
(check http://php.net/manual/de/mysqli.prepare.php ) zurückgeben, wenn ein Fehler aufgetreten ist. Ihr Problem ist, dass Sie INSET
anstelle von INSERT
haben.
Dies kann jemandem helfen: Ich war mit demselben Problem konfrontiert . In meinem Fall habe ich es versäumt, die erste vorbereitete Anweisung zu schließen, bevor die zweite vorbereitete Anweisung ausgeführt wird.
Nachdem ich $select_stmt_type->close();
vor der Ausführung der zweiten vorbereitenden Anweisung hinzugefügt habe, wurde das Problem behoben.
Ihre vorbereitete SQL-Anweisung muss korrigiert werden, wie shudent sagte, aber ich denke, Sie müssen die Werte auch mit ->bind_param()
setzen, bevor Sie ->execute()
aufrufen (was keine Parameter erfordert).
$stmt = $conn->prepare('INSERT INTO renter (email, msg_text) VALUES(?, ?)');
$stmt->bind_param("ss", $_POST['email'], $_POST['msg_text']);
$stmt->execute();
Siehe Dokumentation und Beispiel auf der PHP offiziellen Site: http://php.net/manual/fr/mysqli.prepare.php
Einfach nur hinzufügen. Ein ähnlicher Fehler tritt auf, wenn der Name der MySQL-Spalte in PHP falsch ist. Ich habe unten einen Fehler für meinen Zustand gefunden, als ich den $ conn-> -Fehler gedruckt habe.
fehler: 1054, Fehler: Unbekannte Spalte 'xyz' in 'Feldliste'
So können Sie Fehler abfangen
$req = $conn->prepare('INSERT INTO renter (email, msg_text) VALUES(?, ?)');
if(!$req){
echo "Prepare failed: (". $conn->errno.") ".$conn->error."<br>";
}
since prepare gibt einen Booleschen Wert zurück. Bitte verwenden Sie beim Debuggen Ihren Code und beziehen Sie sich auf Fehlermeldung wie im Kommentar angegeben.