我正在使用php-activerecord
来管理我的MySQL条目。
出现问题的代码块如下:
$item->id = $result->id;
$item->save();
var_dump($result->id); // string(10) "2386737351"
var_dump($item->id); // int(2147483647)
问题是$result->id
应该是string(10) "2386737351"
,但$item->id
变为int(2147483647)
。我的专栏id
的类型为BIGINT
,所以没问题。
看起来php-activerecord
再次将该值转换为int,其上限为最大值2147483647.
显然这是非常错误的并导致Duplicate entry '2147483647' for key 'unique'
。
我怎样才能克服这个?
答案 0 :(得分:1)
本机64位整数需要64位硬件和64位版本的PHP。
在32位硬件上: $ php -r'echo PHP_INT_MAX;' 2147483647
在64位硬件上: $ php -r'echo PHP_INT_MAX;' 9223372036854775807
正如scotts对这个问题的说法:how to have 64 bit integer on PHP?
所以你必须使用PHP 64bits版本来使用BIGINT,否则它们会自动(或不会,你会得到一个错误)转换为整数。
答案 1 :(得分:1)
由于column.php
中的设置,您的BIGINT被强制转换为int。虽然"真正的解决方案"将是运行64位系统,如果你不能,另一件事可能是阻止演员发生
看看line 37 in column.php,我建议你改变它。我自己没有尝试过,但我想这就是诀窍:
'bigint' => self::STRING,