调用布尔值上的成员函数 execute()


Call to a member function execute() on boolean in

My 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>

我的租金.php文件 :

<?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');

当我尝试提交时,我的错误是:致命错误:在第 18 行的 C:...''rent.php 中调用布尔值的成员函数 execute()

电子邮件,msg_text是瓦尔查尔类型

如果发生错误,mysqli->prepare也可以返回FALSE(检查 http://php.net/manual/en/mysqli.prepare.php)。你的问题是你有INSET而不是INSERT.

这可能会帮助某人:我面临着同样的问题。就我而言,我错过了在执行第二个准备好的陈述之前关闭第一个准备好的陈述。

当我在执行第二个准备语句之前添加$select_stmt_type->close();时,它解决了这个问题。

补充一下。 当 mysql 列名在 php 中不正确时,会出现类似的错误。我在打印 $conn->错误时发现以下错误。

errno:1054,错误:"字段列表"中未知列"xyz"

要捕获错误,请执行如下操作

    $req = $conn->prepare('INSERT INTO renter (email, msg_text) VALUES(?, ?)');
    if(!$req){
       echo "Prepare failed: (". $conn->errno.") ".$conn->error."<br>";
    }

由于准备返回布尔值。请在调试代码时使用,并参考注释中所述的错误报告。

正如 shudent 所说,您的 SQL 准备语句需要更正,但我认为您还必须在调用 ->execute() 之前用 ->bind_param() 设置值(它不需要任何参数)。

$stmt = $conn->prepare('INSERT INTO renter (email, msg_text) VALUES(?, ?)');
$stmt->bind_param("ss", $_POST['email'], $_POST['msg_text']);
$stmt->execute();

请参阅PHP官方网站上的文档和示例:http://php.net/manual/fr/mysqli.prepare.php