在布尔值中调用成员函数execute()

时间:2016-02-01 14:01:46

标签: php mysql mysqli

我的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>

我的rent.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中调用boolean上的成员函数execute()

电子邮件,msg_text属于varchar类型

4 个答案:

答案 0 :(得分:14)

如果发生错误,

phone也可以返回mysqli->prepare(检查http://php.net/manual/en/mysqli.prepare.php)。您的问题是FALSE代替INSET

答案 1 :(得分:5)

这可能对某人有所帮助: 我面临同样的问题。 在我的情况下,我错过了在执行第二份预备陈述之前关闭第一份准备好的陈述。

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

答案 2 :(得分:1)

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

$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

答案 3 :(得分:1)

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

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

因为prepare返回布尔值。调试代码时请使用,并按照注释中的说明引用error reporting