在 [重复] 中调用布尔值上的成员函数 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->prepare
也可以在发生错误时返回FALSE
(检查http://php.net/manual/en/mysqli.prepare.php)。你的问题是你有INSET
而不是INSERT
。
【讨论】:
我犯了类似的错误——表名有错别字。【参考方案2】:这可能对某人有帮助: 我面临同样的问题。 就我而言,我错过了在执行第二个准备好的语句之前关闭第一个准备好的语句。
当我在执行第二个准备语句之前添加$select_stmt_type->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 所说的进行更正,但我认为您还必须在调用 ->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
【讨论】:
以上是关于在 [重复] 中调用布尔值上的成员函数 execute()的主要内容,如果未能解决你的问题,请参考以下文章
在布尔值上调用成员函数 attach() - Laravel
Codeigniter 致命错误:在布尔值上调用成员函数 result()
Codeigniter - 在布尔值上调用成员函数 result_array() - 本地设置安装错误