【发布时间】:2018-12-18 12:03:09
【问题描述】:
错误:
致命错误:未捕获的错误:调用成员函数 close() on C:\xampp\htdocs\Project\script\register.php:69 中的布尔值
堆栈跟踪:#0 C:\xampp\htdocs\Project\index.php(2): include_once() #1 {main} 在 C:\xampp\htdocs\Project\script\register.php 中抛出在线69
当我传递通过验证的正确数据时发生错误。
文件:
<?php
include_once 'functions.php';
include_once 'dbconnect.php';
// Returns the request method used to access the page
if ($_SERVER["REQUEST_METHOD"] == "POST"){
$err="";
// Validation ....
.....
// End of it
$prep_stmt = "SELECT id FROM members WHERE email = ? LIMIT 1";
$stmt = $sql_db->prepare($prep_stmt);
// check existing email
if ($stmt) {
$stmt->bind_param('s', $email);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows == 1) {
// A user with this email address already exists
$err .= '<p class="error">A user with this email address already exists.</p>';
$stmt->close();
}
} else {
$err .= '<p class="error">Database error Line 39</p>';
$stmt->close();
}
// check existing username
$prep_stmt = "SELECT id FROM members WHERE username = ? LIMIT 1";
$stmt = $sql_db->prepare($prep_stmt);
if ($stmt) {
$stmt->bind_param('s', $username);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows == 1) {
// A user with this username already exists
$err .= '<p class="error">A user with this username already exists</p>';
$stmt->close();
}
} else {
$err .= '<p class="error">Database error line 55</p>';
$stmt->close();
}
// Hashing, salting and inserting the values.
....
// End of file.
搜索了一些答案,为什么会出现问题,但什么也没找到。
Another thread like this - $stmt->close() 在 if 函数中。
【问题讨论】:
-
想想 - 你运行
if ($stmt)...所以如果失败并进入else那么它一定意味着$stmt是false...即一个 boolean 就像错误消息所说的那样。那么,您如何在布尔值上调用方法(在您的情况下为->close())?微不足道,我们可以看到它没有任何意义。 (如果语句失败,无论如何也没有什么可以关闭的......所以你只是不需要那条线)。然后接下来你需要找出为什么语句失败了。