致命错误:未捕获错误:在布尔上调用成员函数execute()

时间:2019-10-18 09:48:36

标签: php mysqli phpmyadmin prepared-statement

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

  

致命错误:未捕获错误:调用成员函数execute()   布尔在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>';
        }
    } 
}

1 个答案:

答案 0 :(得分:3)

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

在执行之前,您还需要绑定参数,不能发送具有PDO之类的值的数组。

因此,您需要类似(对于您的第一个sql查询):

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