在Laravel或PHP中使用BIGINT的奇怪行为

时间:2017-03-12 22:28:38

标签: php laravel biginteger

我有表(MySQL),其中包含许多BIGINT值。我有两台运行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') - 返回正确的结果

如果我只使用BIGINT值直接在MySQL-client中运行查询,而不是字符串,则查询工作正常。

我不知道如何修复此行为并使我的代码了解BIGINT值。两台计算机都采用64位架构,Mac版本为5.6.29,Debian版本为5.6.30。

1 个答案:

答案 0 :(得分:2)

好吧,经过几个小时阅读文档并尝试使用PDO和Eloquent后,我发现PHP在计算机上使用的mysql-extentions之间存在差异。我的Mac OS上的PHP使用php56-mysqlnd,而我的服务器上的PHP使用常规php5-mysql。我刚刚用php5-mysqlnd替换它,现在一切都在两台计算机上都很好用。 希望,这些信息对其他人可能会有用,他们可能会遇到PDO(以及使用PDO的Eloquent)这种无法解释的行为。 我仍然无法理解老司机那样做的原因,但我很高兴把这个问题抛在脑后。