我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...
}
}