Какие проблемы в моей функции PHP вызывают фатальную ошибку?

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;
}

0

Решение

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);
0

Другие решения

mysqli_stmt :: bind_param возвращает логический вид:
http://php.net/manual/en/mysqli-stmt.bind-param.php

просто удалите ‘$ stmt =’ из строки # 50.

-1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector