【问题标题】:Call to a member function execute() on boolean in [duplicate]在 [重复] 中调用布尔值上的成员函数 execute()
【发布时间】:2016-05-10 00:25:08
【问题描述】:

我的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');

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

email、msg_text 都是 varchar 类型

【问题讨论】:

  • 只是一个非常糟糕的错字。

标签: php mysql mysqli


【解决方案1】:

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

【讨论】:

  • 我犯了类似的错误——表名有错别字。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    只是添加。当 php.ini 中的 mysql 列名不正确时,也会出现类似的错误。当我打印 $conn->error 时,我发现以下错误。

    errno:1054,错误:“字段列表”中的未知列“xyz”

    【讨论】:

    • 我也遇到过这个问题,但这个答案有帮助
    • @Tony 有时我们太热衷于大事,以至于忘记了一个小错误:-)
    • 你是对的..!
    【解决方案4】:

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

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

    因为准备返回一个布尔值。请在调试代码时使用并参考注释中所述的error reporting

    【讨论】:

    • 请不要。立即回应错误信息在很多层面上都是错误的。请阅读我的PHP error reporting
    【解决方案5】:

    您的 SQL 准备语句需要按照 shudent 所说的进行更正,但我认为您还必须在调用 -&gt;execute()(不带任何参数)之前使用 -&gt;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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      • 2017-09-25
      • 1970-01-01
      • 2017-06-07
      • 2018-05-06
      • 2015-02-08
      相关资源
      最近更新 更多