Вы не вызвали $stmt->fetch()
, чтобы поместить результат запроса в связанную переменную $ count.
Поэтому значение $ count устанавливается равным возвращаемому значению $stmt->bind_result()
, которое всегда равно true (1) или false (0).
См. Примеры на http://php.net/manual/en/mysqli-stmt.bind-result.php,, вы используете bind_result()
, чтобы сообщить оператору, в каких PHP переменных хранить результаты, но вы должны получить результаты запроса как отдельный вызов fetch()
.
Комментарий: Ни одна из этих функций не возвращает результат вашего подсчета.
Функции возвращают TRUE в случае успеха и FALSE в случае ошибки. Они не возвращают результат запроса. Вот почему вы связываете переменную, поэтому выборка может сохранить результат в этой переменной как побочный эффект, а не как возвращаемое значение. Вы не должны назначать $count=*anything*
.
Вот как должен выглядеть ваш код:
$stmt = $db->prepare("SELECT COUNT(id) FROM `users` WHERE `email`=? LIMIT 1")
or die($db->error);
$stmt->bind_param("s", $email)
or die ($stmt->error);
$stmt->execute()
or die ($stmt->error);
$stmt->bind_result($count) // do not use return value
or die ($stmt->error);
$stmt->fetch() // do not use return value
or die ($stmt->error);
print ($count);
$stmt->close()
or die ($stmt->error);
return ($count > 0 ? true : false);