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