Mysql При запросе к mysql вместо integer возвращается string

sillycase

Новичок
Т.е. я делаю запрос из скрипта php. В mysql, например, есть таблица, в которой есть поле типа integer, но при проверке в php через gettype() возвращается string. При этом без разницы какой драйвер используется mysqli или pdo, результат один и тот же.
Версия php — пробывал на 5.6, 7.0, 7.1
Версия mysql — 5.7
На сервере установлен mysqlnd
Строгий режим для mysql отключен SELECT @@sql_mode выдает NO_ENGINE_SUBSTITUTION
На форумах пишут, что так и должно быть, что mysql возвращает только строки, но у меня на другой локальной машине, если в mysql integer, то и в php это integer, а не string. Да и раньше у меня с этим нормально все было, заметил такой косяк после переустановки системы и, как следствие, всего ПО.
Так бы ничего страшного, но теперь строгое равенство === не работает.
В общем прошу помощи в решении этого вопроса.
 

AnrDaemon

Продвинутый новичок
Расширение MySQL ВСЕГДА возвращает строки.
Абсолютно всегда.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
pdo с настоящими плейсхолдерами (PDO::ATTR_EMULATE_PREPARES = false) будет возвращать настоящие типы. (c mysqlnd разумеется)
 

Вурдалак

Продвинутый новичок
Так бы ничего страшного, но теперь строгое равенство === не работает.
Несмотря на то, что включить такое поведение можно (см. ответ @флоппик'а), здесь проблема в отсутствии промежуточного слоя между кодом твоего приложения (бизнес-логикой) и PDO. PDO при всей своей кажущейся абстрактности является низкоуровневой библиотекой, которая тесно связана с конкретным хранилищем. Промежуточным слоем может быть, например, ORM или какой-то тупой query service, который получает набор параметров, а возвращает готовый объект с нужными типами.

Расширение MySQL ВСЕГДА возвращает строки.
Абсолютно всегда.
Я тут подобрал несколько синонимов к этой неловкой ситуации: ошибиться в расчетах, сделать промах, опростоволоситься, просчитаться, обмишулиться, посрамиться, облажаться, сплошать, оплошать, ошибиться, ославиться, наломать дров, оконфузиться, оскандалиться, опозориться, промахнуться, обмишуриться, совершить промах, совершить ошибку, сесть в калошу, лажануться, дать маху, лопухнуться, свалять дурака, упасть в глазах, проколоться, уронить себя в глазах, покрыть себя позором, опростофилиться, дать промашку, попасть впросак, допустить ошибку, допустить промах, сплоховать, скомпрометировать себя.
 
Сверху