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());
}
}

DB に挿入される値は「2147483647」です。正しい値は「100000034641562」です。奇妙なのは、"photo" というタイトルの列に、"".$fb_id.".jpg" と等しい値が入力されることになっていることです。基本的に、末尾に「.jpg」が付いた Facebook ID です。その列には正しい値が挿入されています (100000034641562.jpg)。しかし、fb_id 列はそうではありません。列の長さに合わせて照合を調整する必要があるのではないかと思いましたが、それは問題ではありませんでした。

何か案は?

ありがとう、

ランス

4

1 に答える 1

7

データ型の制限である2147483647INTで32ビットに到達しています。列のデータ型をaまたは。などのより大きな整数値に変更する必要があります。VARCHAR()BIGINT

ALTER TABLE users MODIFY fb_id BIGINT;

関連する制限については、整数データ型に関するMySQLのドキュメントを参照してください。

そして、いくつかのユーモラスな文脈については、TheDailyWTFでこの話を読んでください。

于 2012-08-18T14:59:18.343 に答える