PHP:无法在准备语句上打印出 mysqli 错误


PHP: Cannot print out mysqli error on prepare statement

Call to a member function bind_param() on a non-object以下错误,并从研究中意识到我需要在我的准备语句中添加错误检查,因为它可能返回 false。

因此我有这个 ->

 if ($statement = $this ->conn->prepare("INSERT INTO users(name, email, gender, usrDOB, encrypted_password, salt, created_at) VALUES(?,?,?,?,?,?,NOW())")) {
        $statement->bind_param("ssssss", $name, $email, $gender, $usrDOB, $encryptedPassword, $salt);
        $result = $statement->execute();
        $statement->close();
        if ($result) {
            $statement = $this->conn->prepare("SELECT * FROM users WHERE email =?");
            $statement->bind_param("s", $email);
            $statement->execute();
            $user = $statement->get_result()->fetch_assoc();
            $statement->close();
            return $user;
        } else {
            return false;
        }
    }else{
        printf($this->conn->error());
    }

但是,打印出 error(( 时似乎有一个错误,因为它说它没有定义。

我在没有$this的情况下尝试了conn,但无济于事。

一个想法?

如果语句失败,您可以打印错误,如下所示:

$statement->execute();
if ($statement->error) {
    var_dump($statement->error);
}

我使用答案线程底部附近的错误检查解决了这个 url 的问题。

$query = "INSERT INTO users (Fuid, Ffname)   
VALUES (?, ?)   
ON DUPLICATE KEY UPDATE users   
 SET Ffname = ?"; 
if(!$stmt = $db->prepare($query)){ 
    // prepare failed 
    printf("Prepare failed: %s<br>Error: %s.<br>", $query, $db->error); 
} else { 
    // prepare worked 
    $stmt->bind_param('iss',$fuid,$ffname,$ffname); 
    if(!$stmt->execute()){ 
        // execute failed 
        printf("Execute failed: %s<br>Error: %s.<br>", $query, $stmt->error); 
    } else { 
        // execute worked 
        // any code dependent on the insert query running would go here... 
    } 
}