webentwicklung-frage-antwort-db.com.de

Aufruf einer Member-Funktion execute () auf boolean in

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

7
idkn

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.

14
tomas.lang

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.

4
Dhaval Bhimani

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

1
Patrick Janser

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'

1
Vaibs

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.

0
Thagana