слишком большая строка, преобразованная в int

я использую 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

Решение

Ваш BIGINT приводится к int из-за настройки в column.php, В то время как «реальным решением» было бы запустить 64-битную систему, если вы не можете, другая вещь может состоять в том, чтобы просто остановить бросок.

смотреть на строка 37 в column.php , Я предлагаю вам изменить это. Я не пробовал сам, но я полагаю, что это делает трюк:

'bigint'    => self::STRING,
1

Другие решения

Родные 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, иначе они будут автоматически (или нет, и вы получите ошибку) преобразованы в целое число.

1

По вопросам рекламы [email protected]