Php 将Bigint数与1相加时无法获得正确的结果

Php 将Bigint数与1相加时无法获得正确的结果,php,mysql,Php,Mysql,我正在创建一个招生表,其中stud_id列是unsigned bigint(250)。 我正在应用查询“alter table admission AUTO_INCREMENT=2001923456789000; 在php编码中,我获取了最后一个索引,并在其中添加了1,但我得到了错误的结果plz给出了解决方案。结果为指数格式 $sql="select MAX(id) from com_result"; $result=mysql_query($sql) or die(mysql_error()

我正在创建一个招生表,其中stud_id列是unsigned bigint(250)。 我正在应用查询“alter table admission AUTO_INCREMENT=2001923456789000; 在php编码中,我获取了最后一个索引,并在其中添加了1,但我得到了错误的结果plz给出了解决方案。结果为指数格式

$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.">"; 
}
$sql=“从com_结果中选择最大值(id)”;
$result=mysql\u query($sql)或die(mysql\u error());
如果($row=mysql\u fetch\u数组($result)){
$id=$row[0];
$stud_id1=$id+1;
回声“;
}

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

一个选项是在您的服务器上用64位版本重建PHP。检查此答案以了解不同版本的整数范围的差异:

现在,在您当前的例子中,从MySQL获得的数字:
2001923456789000
基本上是溢出的,因为它远远高于整数允许的最大值。这就是为什么您会看到错误的结果,因为一旦超过了限制,PHP将返回并从允许的最低负值开始整数值等..(以周期为单位)

现在,为了在32位PHP中解决这个问题,您必须显式地将从MySQL获得的结果类型转换为
Float
数据类型。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.">"; 
}
if($row=mysql\u fetch\u array($result)){

$id=(浮动)$row[0];//执行
echo PHP_INT_MAX;
。检查值;从MySQL接收到的数据溢出。您需要将数字改为
FLOAT
。此外,这是一个有用的答案:@MadhurBhaiya我无法理解请简要编辑问题并添加失败代码的相关部分。@MadhurBhaiya$sql=”从com_result中选择MAX(id);$result=mysql_query($sql)或die(mysql_error());if($row=mysql_fetch_array($result)){$id=$row[0];$stud_id1=$id+1;echo”“;}它给出的结果如2.019273413028E+17,表的最后一个索引如201927341302805001,我想要下一个数字201927341302805002@user11708206其他解决方案可从以下网址获得: