致命错误:未捕获错误:调用成员函数 execute() on bool [duplicate]

Fatal error: Uncaught Error: Call to a member function execute() on bool [duplicate]

提问人:Bob Limbach 提问时间:10/18/2019 更新时间:10/18/2019 访问量:7361

问:

我想在我的网站添加注册,但我总是收到以下错误消息:

致命错误:未捕获错误:调用成员函数 execute() on C:\xampp\htdocs\webseite\user.class.php:74 中的布尔值堆栈跟踪:#0 C:\xampp\htdocs\webseite\register.php(15):用户>注册()#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>';
        }
    } 
}
php mysqli phpmyadmin 准备语句

评论

0赞 CD001 10/18/2019
$con->prepare()由于某种原因失败,因此返回;所以你现在正在尝试做......falsefalse->execute()

答:

4赞 jeroen 10/18/2019 #1

mysqli不支持命名参数,需要问号。

您还需要在执行之前绑定参数,您不能发送具有类似 .PDO

所以你需要类似的东西(对于你的第一个sql查询):

$statement = $con->prepare("SELECT * FROM users WHERE email = ?");
$statement->bind_param("s", $email);
$result = $statement->execute();

评论

2赞 Your Common Sense 10/18/2019
...在fetch之前,您还需要get_result()和fetch_assoc()而不是fetch()