【问题标题】:Fatal error: Uncaught Error: Call to a member function execute() on bool [duplicate]致命错误:未捕获的错误:调用 bool 上的成员函数 execute() [重复]
【发布时间】: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-&gt;prepare() 由于某种原因失败,因此返回了false;所以你现在正在尝试做false-&gt;execute() ...

标签: php mysqli phpmyadmin prepared-statement


【解决方案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()
猜你喜欢
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 2022-07-02
  • 2023-03-27
相关资源
最近更新 更多