MySQL插入的值与我输入的值不同

时间:2016-05-28 04:00:13

标签: php mysql

我刚刚在Amazon Linux实例中设置了LAMP服务器。一切都很好,我与数据库的所有联系都很好。

但是我遇到了一个我无法弄清楚的问题。我正在研究考试系统,我想给每个学生提供一个随机的ID。我不需要任何有关学生的信息,因此我没有任何可用作唯一标识符的相关字段。

$id_escuela=2;
$id_grupo=$_POST['grado'];
$id_eval=rand(1,9999999999);
$sql = "INSERT INTO pinion_evalua (id_eval,id_escuela,anio) VALUES (".$id_eval.",".$id_escuela.",".$id_grupo.")";

在我的本地服务器上,一切都很好,我每次都会得到随机数,但是当我将文件上传到亚马逊服务器时,即使兰特的结果不同,我也会遇到一个特定的数字(2147483647) 。例如,我得到:

Error: INSERT INTO pinion_evalua(id_eval,id_escuela,anio) VALUES (4612160288,1,2)
Duplicate entry '2147483647' for key 'id_eval'

这怎么可能呢?我尝试删除随机部分并使用自动增量,但我仍然收到相同的数字。我甚至尝试减小int的大小,但我仍然得到数字,即使它违反了该领域的规则。这让我很生气。

你们中的任何人都可以给我一些关于可能出错的提示吗?

问候。

2 个答案:

答案 0 :(得分:3)

在这几行代码中你遇到很多问题:

  • 你显然是在32位系统上运行PHP,并尝试获得比这更大的随机值。
  • 既然你不关心分配的id,为什么不在MySQL中使用自动递增的数字呢?
  • 您的代码易受SQL注入攻击,可以通过输入3); delete pinion_evalua where (1 = 1轻松演示。正确的解决方案是使用PHP manual中记录的预准备语句。

答案 1 :(得分:0)

MySQL中INT列的最大值恰好是2147483647.

http://dev.mysql.com/doc/refman/5.7/en/integer-types.html

每次使用较大的值时,它都会被截断到最大值。您正在观察的行为是正确的,也是预期的。

当列中的最大值也是该列的最大值时,AUTO_INCREMENT会遇到同样的问题。服务器将尝试递增1,该值将被截断为最大可能值,插入将失败。