将Bigint数加1不能得到正确的结果

时间:2019-07-14 04:43:05

标签: php mysql

我正在创建准入表,其中stud_id列是未签名的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.">"; 
}

1 个答案:

答案 0 :(得分:0)

基本上,您正在达到PHP中整数值的最大限制。正如您在comment中所证实的那样,服务器上echo PHP_INT_MAX;的结果是:2147483647。 (因此,基本上是32位的PHP版本)。

一种选择是使用64位版本在服务器上重建PHP。检查以下答案以了解不同版本的整数范围的差异:https://stackoverflow.com/a/2842548/2469308

现在,在您当前的情况下,从MySQL:2001923456789000获得的数字基本上是溢出,因为它远远大于整数的最大允许值。这就是为什么看到错误结果的原因,因为一旦超过限制,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.">"; 
}