2015-05-20 2 views
2

Я использую php-activerecord для управления моими записями MySQL.строка, преобразованная в int слишком велика

Блок кода, где проблема ocurs заключается в следующем:

$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 преобразует это значение в междунар снова который колпачок на это максимальное значение 2147483647.

Очевидно, что это ужасно неправильно и вызывает Duplicate entry '2147483647' for key 'unique'.

Как я могу это преодолеть?

+0

Почему присвоение значения переменной $ item-> преобразует его в int? Действительно ли это * код? но тем не менее, может ли php действительно управлять 64-битными целыми числами? Я думал, что слышал, что кто-то прокомментировал это, не мог, и должен управлять такими числами, как строки –

ответ

1

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

Посмотрите на line 37 in 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

По словам шотландцев по этому вопросу: how to have 64 bit integer on PHP?

Таким образом, вы должны использовать PHP 64бит версию использовать BIGINTs, иначе они будут автоматически (или нет, и вы получите сообщение об ошибке) преобразуется в целое число ,