我刚刚在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的大小,但我仍然得到数字,即使它违反了该领域的规则。这让我很生气。
你们中的任何人都可以给我一些关于可能出错的提示吗?
问候。
答案 0 :(得分:3)
在这几行代码中你遇到很多问题:
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,该值将被截断为最大可能值,插入将失败。