我正在使用facebook api来获取用户的facebook id,然后将其插入到mysql中。它在大多数情况下工作正常。但是,由于某些奇怪的原因,插入到我的数据库中的fb_id列的值与应该插入查询字符串中的值不同。我的代码如下:
$facebook = new Facebook(array(
'appId' => '12345',
'secret' => '12345',
'cookie' => true
));
$access_token = $facebook->getAccessToken();
if($access_token != "")
{
$user = $facebook->getUser();
if($user != 0)
{
$user_profile = $facebook->api('/me');
$fb_id = $user_profile['id'];
$fb_first_name = $user_profile['first_name'];
$fb_last_name $user_profile['last_name'];
$fb_email = $user_profile['email'];
$img_data = file_get_contents('https://graph.facebook.com/'.$fb_id.'/picture?type=large');
$save_path = 'img/profile_pics/large/';
file_put_contents(''.$save_path.''.$fb_id.'.jpg', $img_data);
$insert = "INSERT INTO users
(first_name, last_name, email, photo, fb_id, accuracy_rate, date_joined, date_joined_int)
VALUES
('".$fb_first_name."', '".$fb_last_name."', '".$fb_email."', '".$fb_id.".jpg', '".$fb_id."', '100', '".date("F j, Y")."', '".idate("z")."')";
$result = mysql_query($insert)or die(mysql_error());
}
}
插入数据库的值是“2147483647”。正确的值应为“100000034641562”。奇怪的是,标题为“照片”的列应该填充一个等于“”的值。$ fb_id。“。jpg”。基本上,facebook id最后只有一个“.jpg”。该列具有插入其中的正确值(100000034641562.jpg)。但是,fb_id列不是。我想也许我不得不调整列长度的校对,但这不是问题。
有什么想法吗?
谢谢,
兰斯
答案 0 :(得分:7)
您正在2147483647达到INT
数据类型的限制,32位。您需要将列的数据类型更改为VARCHAR()
或更大的整数值,例如BIGINT
。
ALTER TABLE users MODIFY fb_id BIGINT;
查看MySQL's documentation on integer data types了解相关限制。
对于一些幽默的背景,read this story在The Daily WTF。