Нет ограничений на символы подчеркивания в идентификаторе.
Идентификаторы могут быть чувствительными к регистру (в зависимости от конфигурации сервера MySQL).
Идентификатор должен быть экранирован, если он содержит пробелы, точки или другие запрещенные символы.
Но если проблема связана с неверным или неизвестным идентификатором, мы ожидаем, что prepare
или execute
выдаст ошибку.
Если вызывается fetch
, то это означает, что у нас есть действительный дескриптор оператора. Если бы произошла ошибка, то $stmt
был бы ЛОЖЬ, а не дескриптор оператора, и мы увидели бы ошибку PHP (логическое значение не имеет метода / функции выборки.)
Выборка вернет FALSE, когда больше нет строк для возврата.
Поведение, описанное в вопросе, по-видимому, указывает на то, что запрос выполняется успешно, но запрос возвращает пустой набор результатов.
С точки зрения SQL, для SELECT допустимо возвращать ноль строк.
Мы собираемся предположить, что эти две строки кода
$user_id = $stmt->fetch();
var_dump($user_id); die;
были добавлены для отладки.
Если мы ожидаем, что одна строка будет возвращена, нет смысла выдавать другую выборку ...
$stmt->fetch()