getUserIDForEmail
предполагается запросить MySQL DB и найти адрес электронной почты и получить соответствующий идентификатор пользователя.
Этот тестовый пример:
$adminId = getUserIDForEmail("a.h@outlook.com");
Результаты в этой ошибке:
Фатальная ошибка: Uncaught Ошибка: вызов функции-члена execute () для логического значения в /…/public_html/db.php:51 Трассировка стека: # 0 /…/public_html/register.php(5): getUserIDForEmail ( ‘ah@outlook.com’) # 1 {main} добавляется в /…/public_html/db.php в строке 51
Строка 51:
$stmt = $stmt->execute();
Из этого кода:
/* code omitted here */
$conn = new mysqli(DB['servername'], DB['username'], DB['password'], DB['dbname']);
if ($conn->connect_error) {
die('Connection failed: ' . $conn->connect_error);
}
session_start();
/* code omitted here */
/**
* Query database for registered email and get user ID.
*
* @param {String} $email
* @return {Number} $userID
*/
function getUserIDForEmail($email) {
global $conn;
$userID = -1;
$sql = '';
$stmt = null;
$row = null;
if (empty($email)) {
throw new Exception("Email is undefined");
} else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
throw new Exception("Email is not correctly formatted");
}
$sql = "SELECT `id` FROM `UserAccount` WHERE `email` = ?";
/* Avoid SQL injection */
if ($stmt = $conn->prepare($sql)) {
$stmt = $stmt->bind_param('s', $email);
$stmt = $stmt->execute();
if ($stmt->num_rows > 0) {
$row = $result->fetch_assoc(); // first result
$userID = $row["id"];
}
$stmt->close();
}
return $userID;
}
bind_param()
возвращает boolean
и вы переназначаете это $stmt
, Вы делаете то же самое с execute()
, Просто вызовите методы на $stmt
объект:
$stmt->bind_param('s', $email);
$stmt->execute();
Тогда у вас будут проблемы с этим, так как нет $result
:
$row = $result->fetch_assoc();
Так просто fetch()
из заявления:
$row = $stmt->fetch(PDO::FETCH_ASSOC);
mysqli_stmt :: bind_param возвращает логический вид:
http://php.net/manual/en/mysqli-stmt.bind-param.php
просто удалите ‘$ stmt =’ из строки # 50.