转换为int的字符串太大

时间:2015-05-20 01:58:31

标签: php mysql phpactiverecord

我正在使用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'

我怎样才能克服这个?

2 个答案:

答案 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,