在Laravel或PHP中使用BIGINT的奇怪行为
我的表(MySQL)中有很多BIGINT值。我有两台计算机运行PHP代码(基于Laravel框架),从这些表中获取值。 在一台机器(Mac OS)上,一切正常,但另一台机器(Debian jessie)让我抓狂。问题是,我不能在查询中使用BIGINT值。以下是我所说的几个例子:在Laravel或PHP中使用BIGINT的奇怪行为,php,laravel,biginteger,Php,Laravel,Biginteger,我的表(MySQL)中有很多BIGINT值。我有两台计算机运行PHP代码(基于Laravel框架),从这些表中获取值。 在一台机器(Mac OS)上,一切正常,但另一台机器(Debian jessie)让我抓狂。问题是,我不能在查询中使用BIGINT值。以下是我所说的几个例子: Client::where('Client_id',10203629136783381)->first()-返回null Client::where('Client_id','10203629136783381')->f
Client::where('Client_id',10203629136783381)->first()代码>-返回null
Client::where('Client_id','10203629136783381')->first()代码>-返回正确的结果
\DB::select('select*FROM client,其中client_id=?',[10203629136783381])
-返回空数组
\DB::select('select*FROM client,其中client_id=10203629136783381')
-返回正确的结果
如果我只是直接在MySQL客户机中使用BIGINT值(而不是字符串)运行查询,查询就可以正常工作
我不知道如何修复此行为并使我的代码理解BIGINT值。这两台计算机都有64位的体系结构,Mac上的PHP版本是5.6.29,Debian上的PHP版本是5.6.30。好吧,在阅读了几个小时的文档并试用了PDO和Eloquent之后,我发现PHP在计算机上使用的mysql扩展之间存在差异。Mac OS上的PHP使用php56 mysqlnd
,服务器上的PHP使用常规php5 mysql
。我刚刚用php5 mysqlnd
替换了它,现在两台计算机上的一切都很好。
希望,这些信息将对其他人有用,他们可能会被PDO的这种无法解释的行为所困扰(并且雄辩,使用PDO)。
我仍然无法理解旧驱动程序以这种方式工作的原因,但我很高兴将这个问题抛在脑后。您的PHP版本能够处理这么大的数字吗?检查您正在使用的PHP版本,以及它是64位还是32位。这是值得测试的。正如我所提到的,在行为错误的计算机上,PHP的版本比在另一台计算机上更新鲜,在另一台计算机上,一切正常。INT_MAX在两台计算机上都有9223372036854775807值echo 10203629136783381
产生了什么?我认为一个安装是坏的,或者是32位的,并且运行不好。不幸的是,只有你自己可以调试这个。您需要跟踪这些步骤,直到找到整数丢失其值的位置。它可以在PHP之间的任何位置,也可以在PHP和MySQL之间的TCP请求中。