致命错误:未捕获的错误:调用 bool 上的成员函数 execute() [重复]
Posted
技术标签:
【中文标题】致命错误:未捕获的错误:调用 bool 上的成员函数 execute() [重复]【英文标题】:Fatal error: Uncaught Error: Call to a member function execute() on bool [duplicate] 【发布时间】:2020-02-15 07:08:49 【问题描述】:我想向我的网站添加注册,但我总是收到以下错误消息:
致命错误:未捕获的错误:调用成员函数 execute() on C:\xampp\htdocs\webseite\user.class.php:74 中的布尔值堆栈跟踪:#0 C:\xampp\htdocs\webseite\register.php(15): user->register() #1 main 在第 74 行的 C:\xampp\htdocs\webseite\user.class.php 中抛出
这是我的注册函数:
public function register()
$con = new mysqli("localhost", "xxxxx", "password", "xxxxx");
$error = false;
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$email = $_POST['email'];
$passwort = $_POST['passwort'];
$passwort2 = $_POST['passwort2'];
if(!filter_var($email, FILTER_VALIDATE_EMAIL))
echo 'Bitte eine gültige E-Mail-Adresse eingeben<br>';
$error = true;
if(strlen($passwort) == 0)
echo 'Bitte ein Passwort angeben<br>';
$error = true;
if($passwort != $passwort2)
echo 'Die Passwörter müssen übereinstimmen<br>';
$error = true;
echo $email;
if(!$error)
$statement = $con->prepare("SELECT * FROM users WHERE email = :email");
$result = $statement->execute(array('email' => $email));
$user = $statement->fetch();
if($user !== false)
echo 'Diese E-Mail-Adresse ist bereits vergeben<br>';
$error = true;
if(!$error)
$passwort_hash = password_hash($passwort, PASSWORD_DEFAULT);
$statement = $con->prepare("INSERT INTO users (email, passwort, firstname, lastname) VALUES (:email, :passwort, :firstname, :lastanme)");
$result = $statement->execute(array('email' => $email, 'passwort' => $passwort_hash));
if($result)
echo 'Du wurdest erfolgreich registriert. <a href="login.php">Zum Login</a>';
else
echo 'Beim Abspeichern ist leider ein Fehler aufgetreten<br>';
【问题讨论】:
$con->prepare()
由于某种原因失败,因此返回了false
;所以你现在正在尝试做false->execute()
...
【参考方案1】:
mysqli
不支持命名参数,需要问号。
你还需要在执行前绑定参数,你不能发送像PDO
这样的值的数组。
所以你需要类似的东西(对于你的第一个 sql 查询):
$statement = $con->prepare("SELECT * FROM users WHERE email = ?");
$statement->bind_param("s", $email);
$result = $statement->execute();
【讨论】:
...而且您还需要 get_result() 在 fetch 之前以及 fetch_assoc() 而不是 fetch()以上是关于致命错误:未捕获的错误:调用 bool 上的成员函数 execute() [重复]的主要内容,如果未能解决你的问题,请参考以下文章
致命错误:未捕获的错误:在 null 上调用成员函数 select()
致命错误:未捕获错误:在null上调用成员函数select()
PHP“致命错误:未捕获错误:调用成员函数prepare()为null”
致命错误:未捕获的错误:在解析数据时调用字符串上的成员函数 find()