我正在创建准入表,其中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.">";
}
答案 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.">";
}