4

我正在使用 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”。奇怪的是,标题为“photo”的列应该填充一个等于“”.$fb_id.“.jpg”的值。基本上,facebook id 的末尾只有一个“.jpg”。该列中插入了正确的值(100000034641562.jpg)。但是, fb_id 列不是。我想也许我必须调整列长度的排序规则,但这不是问题。

有任何想法吗?

谢谢,

4

1 回答 1

7

您正在达到数据类型的限制,即2147483647INT的32 位。您需要将列的数据类型更改为 a或更大的整数值,例如.VARCHAR()BIGINT

ALTER TABLE users MODIFY fb_id BIGINT;

查看MySQL 的有关整数数据类型的文档以了解相关限制。

对于一些幽默的背景,请在 The Daily WTF阅读这个故事。

于 2012-08-18T14:59:18.343 回答