我在facebook上有一个应用程序,我在我的数据库上记录用户(脚本检查用户是否已经在数据库中,如果没有,则添加他)。 users表只有一个字段 - “userid”,这是一个主键。
检查用户是否已在db中注册的脚本是:
$selectuser = $db->query("SELECT * FROM `predictorusers` WHERE `userid`='$user'");
if ($db->countRows($selectuser) == 0)
$db->query("INSERT INTO `predictorusers` (`userid`) VALUES ('$user')");
现在问题:我不知道为什么,但是对于特定的用户(对于大多数用户来说,如果工作得很好)它会插入id 2147483647(在Facebook上甚至不存在!!),当他再次进入应用程序,他收到以下消息:
密钥1的重复条目“2147483647”
就像它试图再次添加它,即使它已经存在于db !!
有人能搞清楚吗?
答案 0 :(得分:8)
关于MySQL中字段的定义。我确定你的字段设置为INT类型。
重复条目'2147483647'表示密钥1 == MySQL中此类型的最大数字。
因此,当FB ID大于此值时,MySQL会将此值设置为允许的最大值,因此当ID较大时会给您重复,因为条目必须是唯一的。
将字段更改为VARCHAR(255),您的问题将得到解决。
ALTER predictorusers
ALTER COLUMN userid
VARCHAR(255)NULL
答案 1 :(得分:0)
使用BIGINT(20)作为数据类型。 FB ID太大了。