php - 将 Bigint 数与 1 相加无法得到正确的结果
问题描述
我正在创建其中 stud_id 列是 unsigned bigint(250) 的招生表。我正在应用查询“更改表准入 AUTO_INCREMENT = 2001923456789000;在 php 编码中,我正在获取最后一个索引并将 1 添加到其中,但我得到错误的结果请给出解决方案。结果为指数格式。
$sql="select MAX(id) from com_result";
$result=mysql_query($sql) or die(mysql_error());
if($row=mysql_fetch_array($result)) {
$id=$row[0];
$stud_id1=$id+1;
echo "<input type='text' class='form-control' id='id' name='id' readonly value=".$stud_id1.">";
}
解决方案
您基本上达到了 PHP 中整数值的最大限制。正如您在评论echo PHP_INT_MAX;
中所证实的那样,您服务器上的结果是: 2147483647
。(所以,基本上是一个 32 位的 PHP 版本)。
一种选择是使用 64 位版本在您的服务器上重建 PHP。检查此答案以了解不同构建的整数范围的差异:https ://stackoverflow.com/a/2842548/2469308
现在,在您当前的情况下,从 MySQL: 获得的数字2001923456789000
基本上是overflowing,因为它远高于整数的最大允许值。这就是您看到错误结果的原因,因为一旦超过限制,PHP 就会倒退并从允许的最低负整数值开始,依此类推..(以循环为单位)
现在,为了在 32 位 PHP 中解决这个问题,您必须将从 MySQL 获得的结果显式类型转换Float
为数据类型。浮点数可用于最大为 2^53 + 1 的整数值。
尝试以下操作:
if($row=mysql_fetch_array($result)) {
$id = (float)$row[0]; // <-- Typecasting to float
$stud_id1 = $id + 1;
echo "<input type='text' class='form-control' id='id' name='id' readonly value=".$stud_id1.">";
}