2011-09-30 94 views
2

我在Facebook上有一个应用程序,并将用户登录到我的数据库上(脚本检查用户是否已经在数据库上,如果没有,则添加他)。用户表只有一个字段 - “userid”,这是一个主键。登录Facebook上的用户时出现错误

,检查用户是否在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上存在!!),而当他再次进入应用程序,他得到了以下消息:

重复条目“2147483647”的关键1

就像它试图再次添加它,即使它已经存在于数据库中!

任何人都可以弄明白吗?

回答

8

这是关于MySQL中字段的定义。我相信你的领域被设置为INT类型。

键1的重复条目'2147483647'== MySQL中此类型的最大数目。

因此,当FB ID大于此值时,MySQL会将此设置为允许的最大值,因此在ID很大时会给出重复项,因为项必须是唯一的。

将该字段更改为VARCHAR(255),您的问题将得到解决。

ALTER predictorusers ALTER COLUMN userid VARCHAR(255)NULL

0

使用BIGINT(20),而不是作为数据类型。 FB ID太大。