Laravel 或 PHP 中 BIGINT 的奇怪行为
Strange behavior with BIGINT in Laravel or PHP
我的表 (MySQL) 中有很多 BIGINT 值。我有 2 台计算机,其中 PHP 代码(基于 Laravel 框架)运行s,从这些表中获取值。
在一台机器上 (Mac OS) 一切正常,但另一台机器 (Debian jessie) 让我抓狂。问题是,我不能在查询中使用 BIGINT 值。以下是我所说的几个例子:
Client::where('client_id', 10203629136783381)->first();
— returns null
Client::where('client_id', '10203629136783381')->first();
— returns 正确结果
\DB::select('SELECT * FROM clients WHERE client_id=?', [10203629136783381])
— returns 空数组
\DB::select('SELECT * FROM clients WHERE client_id=10203629136783381')
— returns 正确结果
如果我只是 运行 直接在 MySQL 客户端中使用 BIGINT 值而不是字符串进行查询,则查询工作正常。
我不知道如何解决此问题并让我的代码理解 BIGINT 值。两台计算机都是 64 位架构,PHP 版本在 Mac 上是 5.6.29,在 Debian 上是 5.6.30。
好吧,在阅读文档并尝试使用 PDO 和 Eloquent 几个小时后,我发现计算机上 PHP 使用的 mysql-extentions 之间存在差异。 PHP 在我的 Mac OS 上使用 php56-mysqlnd
和 PHP 在我的服务器上使用常规 php5-mysql
。我刚刚用 php5-mysqlnd
替换了它,现在两台计算机上的一切都很好。
希望这些信息对其他人有用,他们可能会被 PDO(和使用 PDO 的 Eloquent)的这种无法解释的行为所困扰。
我仍然不明白旧 driver 以这种方式工作的原因,但我很高兴将这个问题抛在脑后。
我的表 (MySQL) 中有很多 BIGINT 值。我有 2 台计算机,其中 PHP 代码(基于 Laravel 框架)运行s,从这些表中获取值。 在一台机器上 (Mac OS) 一切正常,但另一台机器 (Debian jessie) 让我抓狂。问题是,我不能在查询中使用 BIGINT 值。以下是我所说的几个例子:
Client::where('client_id', 10203629136783381)->first();
— returns null
Client::where('client_id', '10203629136783381')->first();
— returns 正确结果
\DB::select('SELECT * FROM clients WHERE client_id=?', [10203629136783381])
— returns 空数组
\DB::select('SELECT * FROM clients WHERE client_id=10203629136783381')
— returns 正确结果
如果我只是 运行 直接在 MySQL 客户端中使用 BIGINT 值而不是字符串进行查询,则查询工作正常。
我不知道如何解决此问题并让我的代码理解 BIGINT 值。两台计算机都是 64 位架构,PHP 版本在 Mac 上是 5.6.29,在 Debian 上是 5.6.30。
好吧,在阅读文档并尝试使用 PDO 和 Eloquent 几个小时后,我发现计算机上 PHP 使用的 mysql-extentions 之间存在差异。 PHP 在我的 Mac OS 上使用 php56-mysqlnd
和 PHP 在我的服务器上使用常规 php5-mysql
。我刚刚用 php5-mysqlnd
替换了它,现在两台计算机上的一切都很好。
希望这些信息对其他人有用,他们可能会被 PDO(和使用 PDO 的 Eloquent)的这种无法解释的行为所困扰。
我仍然不明白旧 driver 以这种方式工作的原因,但我很高兴将这个问题抛在脑后。