Странное поведение с BIGINT в Laravel или Stack Overflow

У меня есть таблицы (MySQL) с большим количеством значений BIGINT в них. И у меня есть 2 компьютера, на которых работает PHP-код (на основе фреймворка Laravel), получающий значения из этих таблиц.
На одной машине (Mac OS) все работает нормально, но на другой (Debian jessie) меня бесит. Проблема в том, что я не могу использовать значения BIGINT в запросах. Вот несколько примеров того, о чем я говорю:

Client::where('client_id', 10203629136783381)->first(); — возвращает null
Client::where('client_id', '10203629136783381')->first(); — возвращает правильный результат

\DB::select('SELECT * FROM clients WHERE client_id=?', [10203629136783381]) — возвращает пустой массив

\DB::select('SELECT * FROM clients WHERE client_id=10203629136783381') — возвращает правильный результат

Если я просто запускаю запрос непосредственно в MySQL-клиенте, используя значение BIGINT как есть, а не как строку, запрос работает нормально.

Я не знаю, как исправить это поведение и заставить мой код понимать значения BIGINT. Оба компьютера имеют 64-битную архитектуру, версия PHP 5.6.29 для Mac и 5.6.30 для Debian.

0

Решение

Что ж, после нескольких часов чтения документов и экспериментов с PDO и Eloquent я обнаружил разницу между расширениями mysql, используемыми PHP на компьютерах. PHP на моем Mac OS использует php56-mysqlnd а PHP на моем сервере используется регулярно php5-mysql, Я только что заменил его php5-mysqlnd и теперь все отлично работает на обоих компьютерах.
Надеюсь, эта информация будет полезна для кого-то еще, кто может застрять с таким необъяснимым поведением PDO (и Eloquent, который использует PDO).
Я до сих пор не могу понять причину, по которой так работал старый водитель, но я рад оставить этот вопрос за моей спиной.

2

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

Других решений пока нет …