я использую 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'
,
Как я могу преодолеть это?
Ваш BIGINT приводится к int из-за настройки в column.php
, В то время как «реальным решением» было бы запустить 64-битную систему, если вы не можете, другая вещь может состоять в том, чтобы просто остановить бросок.
смотреть на строка 37 в column.php , Я предлагаю вам изменить это. Я не пробовал сам, но я полагаю, что это делает трюк:
'bigint' => self::STRING,
Родные 64-битные целые числа требуют 64-битного оборудования И 64-битной версии PHP.
На 32-битном оборудовании:
$ php -r ‘echo PHP_INT_MAX;’ 2147483647На 64-битном оборудовании:
$ php -r ‘echo PHP_INT_MAX;’ 9223372036854775807
Как сказал Скоттс на этот вопрос: как иметь 64-битное целое число на PHP?
Таким образом, вы должны использовать версию PHP 64bit для использования BIGINT, иначе они будут автоматически (или нет, и вы получите ошибку) преобразованы в целое число.