2017-03-12 12 views
0

私は、たくさんのBIGINT値を持つテーブル(MySQL)を持っています。そして、私は2つのコンピュータにPHPコード(Laravelフレームワークに基づいて)が実行され、それらのテーブルから値を取得します。 1つのマシン(Mac OS)ですべて正常に動作しますが、別のマシン(Debian jessie)が私を怒らせます。問題は、クエリでBIGINT値を使用できないことです。ここで私が話しているかの例のカップルです:LaravelまたはPHPの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')を返します。

BIGINT値をそのまま文字列として使うのではなく、MySQL-clientで直接クエリを実行すると、クエリは正常に動作します。

私はこの動作を修正し、私のコードは、BIGINT値を理解させる方法がわかりません。どちらのコンピュータも64ビットアーキテクチャで、PHPバージョンはMacでは5.6.29、Debianでは5.6.30です。

+1

あなたのPHPのバージョンは、それほど大きな数字を扱うことができますか?使用しているPHPのバージョンをチェックし、64ビットまたは32ビットの場合はそれを確認してください。それは['INT_MAX'](http://stackoverflow.com/questions/864058/how-to-have-64-bit-integer-on-php)のテストに値する。 – tadman

+0

私が言及したように、間違った動作をしているコンピュータ上のPHPのバージョンは、すべてがうまく動作する別のバージョンより少し新鮮です。 –

+0

INT_MAXは両方のコンピュータで値9223372036854775807を持っています –

答えて

1

まあ、ドキュメントを読み、PDOと雄弁で実験の数時間後、私はコンピュータ上でPHPが使用するMySQLの-extentionsとの違いを発見しました。私のMac OSのPHPはphp56-mysqlndを使用し、私のサーバーのPHPは普通のphp5-mysqlを使用していました。私はちょうどそれをphp5-mysqlndと置き換えました。そして今は両方が両方のコンピュータでうまくいきます。 この情報は、このような説明できないPDOの動作(PDOを使用するEloquent)に悩まされる可能性のある他の人にとって役に立ちます。 私はまだ古いドライバがそのように働いた理由を得ることができませんが、私はこの問題を私の背後に残して嬉しいです。

関連する問題