我在我们的mysql数据库中存储64位Facebook ID。当我查看数据库表时,值为32位。我正在使用Laravel,与PDO连接。如果转出的值在绑定中是正确的。一旦执行,它们在DB中就不同了。我已经尝试将数据库从MariaDB更改为MySQL,以查看它是否是导致它的数据库。一切都指向它是PDO。
在使用完全相同版本的PHP 7.0.15
的本地开发计算机上不会发生这种情况。我在开发或本地都没有错误。
MySQL和PHP是64位版本。我找不到任何有助于我解决问题的方法。
我从2013年发现this bug report这清楚地说明了我的问题,但似乎已经解决了。
在Laravel的Connection类中,bindValues
方法正在检查数据类型。
public function bindValues($statement, $bindings)
{
foreach ($bindings as $key => $value) {
dump($value); // Value is correct at this point.
$statement->bindValue(
is_string($key) ? $key : $key + 1, $value,
is_int($value) ? PDO::PARAM_INT : PDO::PARAM_STR
);
}
}
我还尝试将第三个参数设置为PDO::PARAM_STR
,但这并没有改变行为。
服务器为CentOS Linux 7.3.1611
,MySQL为5.7.17
,PHP为7.0.15
PDO和MySql扩展
php70w-pdo.x86_64 7.0.15-1.w7 @webtatic
php70w-mysql.x86_64 7.0.15-1.w7 @webtatic
该表格为InnoDB
,编码为UTF-8 Unicode
,排序规则为utf8_unicode_ci
sql连接是:
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => true,
'modes' => ['STRICT_TRANS_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','ERROR_FOR_DIVISION_BY_ZERO','NO_AUTO_CREATE_USER','NO_ENGINE_SUBSTITUTION'],
'engine' => null,
我可以尝试解决我的问题?
答案 0 :(得分:0)
我找到了解决方案。我们的服务器使用的是常规php70-mysql
驱动程序,而不是本机驱动程序php70-mysqlnd
。一旦我们更新了整数就被保留了。