PDO возвращает false при извлечении, когда таблица имеет имя с подчеркиванием - PullRequest
0 голосов
/ 28 августа 2018

У меня есть эта простая функция, которая возвращает базу user_id на код сотрудника, полученный параметром, проблема в том, что выборка возвращает false, я пробовал с другим именем таблицы и работает нормально. Имеет ли PDO какие-то ограничения для таблиц, в имени которых содержится _? Таблица fos_user, созданная с помощью Symfony с использованием пакета FOS User.

Вот код.

private function getUserId(string $num_empleado): int {

    $stmt = $this->handler->prepare("SELECT id FROM fos_user WHERE numempleado = :numempleado");

    $stmt->execute([":numempleado" => $num_empleado]);

    $user_id = $stmt->fetch();
    var_dump($user_id); die;

    return $stmt->fetch()["id"];
}

Я также пытался сохранить имя таблицы в переменной и объединить, но с теми же результатами.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Нет ограничений на символы подчеркивания в идентификаторе.

Идентификаторы могут быть чувствительными к регистру (в зависимости от конфигурации сервера MySQL).

Идентификатор должен быть экранирован, если он содержит пробелы, точки или другие запрещенные символы.

Но если проблема связана с неверным или неизвестным идентификатором, мы ожидаем, что prepare или execute выдаст ошибку.

Если вызывается fetch, то это означает, что у нас есть действительный дескриптор оператора. Если бы произошла ошибка, то $stmt был бы ЛОЖЬ, а не дескриптор оператора, и мы увидели бы ошибку PHP (логическое значение не имеет метода / функции выборки.)

Выборка вернет FALSE, когда больше нет строк для возврата.

Поведение, описанное в вопросе, по-видимому, указывает на то, что запрос выполняется успешно, но запрос возвращает пустой набор результатов.

С точки зрения SQL, для SELECT допустимо возвращать ноль строк.

Мы собираемся предположить, что эти две строки кода

    $user_id = $stmt->fetch();
    var_dump($user_id); die;

были добавлены для отладки.

Если мы ожидаем, что одна строка будет возвращена, нет смысла выдавать другую выборку ...

    $stmt->fetch()
0 голосов
/ 28 августа 2018

Я не смог найти ничего об ограничении подчеркивания.

Попытайтесь процитировать имя таблицы, хотя это всегда хорошая идея. Используйте назад галочки , а не фактические кавычки.

`fos_user`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...