在 [重复] 中调用布尔值上的成员函数 execute()

Posted

技术标签:

【中文标题】在 [重复] 中调用布尔值上的成员函数 execute()【英文标题】:Call to a member function execute() on boolean in [duplicate] 【发布时间】: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 类型

【问题讨论】:

只是一个非常糟糕的错字。 【参考方案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

【讨论】:

以上是关于在 [重复] 中调用布尔值上的成员函数 execute()的主要内容,如果未能解决你的问题,请参考以下文章

在布尔值上调用成员函数 attach() - Laravel

Codeigniter 致命错误:在布尔值上调用成员函数 result()

Codeigniter - 在布尔值上调用成员函数 result_array() - 本地设置安装错误

函数不起作用:PHP 致命错误:在布尔值上调用成员函数 bind_param()

成员函数指针值上的 Consexpr - 未定义的行为?

已发布值上的 SwiftUI toggle() 函数停止使用 Swift 5.2 触发 didSet