2012-01-23 37 views
0

我得到了一些神祕的bug ..在我的數據庫中,PHP中的硬編碼數字如何轉換爲另一個數字?奇怪

好吧,所以我在LocalHost工作與最新版本的MySQL。我使用CodeIgniter工作(2.0.2) 我想實現這樣的模型中的功能:

function saveMyFriends($friends_list){ 

$this->load->library('encrypt');  
    foreach($friends_list as $friend){ 
     // echo $friend['id'].' : '.utf8_decode($friend['name']).'</br>'; 

     $query_str ="INSERT INTO sc_friends (fb_id, fb_friends_id, fb_friends_name) VALUES (?, ?, ?)"; 
     $fb_id =$this->session->userdata('user_fbid'); 
     $this->db->query($query_str, array($fb_id, $friend['id'], sha1(utf8_decode($friend['name'])))); 
    } 
    return TRUE; 
} 

這是應該在數據庫中保存我的Facebook好友列表,但它發生大約5%的結果具有相同的Fb_id ......這是不可能的。所以,我試圖手動輸入一些朋友,我只是改變enter code here幾行字:

function saveMyTwoFriends(){ 

$this->load->library('encrypt');  
     $query_str ="INSERT INTO sc_friends (fb_id, fb_friends_id, fb_friends_name) VALUES (?, ?, ?)"; 
     $this->db->query($query_str, array(7518777XX, 1000028691344XX, sha1(utf8_decode('XXX XXXX')))); 
    return TRUE; 
} 

(當然,X爲實數或真實姓名) 但再次,在我的數據庫,當我手動輸入第三個(我給你的例子)我有反覆出現的「相同的ID」:「2147483647」

這怎麼可能? 謝謝:)

回答

4

2147483647是在32位PHP中可表示的最大整數。如果你的數據庫庫試圖把100002869134477這個更大的數字當作整數來處理 - 你得到的是2147483647.你可以使用浮點數或常量字符串或擴展名,如bcmath或gmp,你需要使用更大的數字。

+0

PHP沒有int64? –

+0

不是單獨的類型。在64位系統上,當PHP編譯爲64位二進制文​​件時,其整數類型爲64位,但在32位系統上,32位是從整數類型獲得的。 – StasM

+0

好的,謝謝! 使用BigInt怎麼樣?使用BigInt時簽名問題是什麼? –

0

的Facebook總是定義/返回用戶的Facebook ID作爲string,所以我會在數據庫中使用varchar()代替bigint()

的ID - 用戶的Facebook ID。 string

+0

嗯,好的,謝謝! –

相關問題