2012-12-19 40 views
0

我已經建立了一個保存哈希標籤搜索結果的php腳本,當我保存它只是嘗試保存重複的推文ID時。 我已經在表上設置了一個UNIQUE約束,它顯然不會保存除第一條推文之外的任何內容,並且會拋出下面的錯誤。這並不奇怪,Twitter不保存唯一身份證號碼

ERROR: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2147483647' for key 2 

如果我刪除它可以正確保存所有的鳴叫,但推特ID重複

我試圖從我使用的是同一個變量顯示輸出的鳴叫約束放在表中,這是所有的唯一和正確的,所以變量是正確的。所以,我只能假設一些古怪的事情全部由自己

foreach($results as $result) { 
$tweet_ID = $result->id_str; 
$userID = $result->from_user_id_str; 
$tweetText = $result->text; 
$tweet_time = strtotime($result->created_at); 
$createdAt = date('Y-m-d H:i:s ',$tweet_time); 

echo '<div>'. $tweet_ID . 
    '<div class="tweet" >' . displayTweet($result->text),"\r\n" . 
     '<div class="user">'. '<strong>Posted </strong>' . date('j/n/y H:i:s ',$tweet_time). '<strong> By </strong>' . 
     '<a rel="nofollow" href="http://twitter.com/' . $result->from_user. '">' . $result->from_user . 
     '</div>' . 
    '</div>'; 

// Execute query 
$stmt = $conn->prepare("INSERT INTO ".$hashtag."(tweetID, userID, tweetText, createdAt) VALUES(:tweetID, :userID, :tweetText, :createdAt)"); 
$stmt->execute(array(':tweetID' => $tweet_ID, ':userID' => $userID, ':tweetText' => $tweetText, ':createdAt' => $createdAt)); 
} 
} catch(PDOException $e) { 
    echo 'ERROR: ' . $e->getMessage(); 
} 

我想不出我的生活爲什麼它節省一些隨機數

,這是增加數量爲2147483647對我來說沒有任何意義。 上正在發生的事情任何幫助,將不勝感激

回答

2

這個數字2147483647清楚地表明,不使用64位整數來鳴叫ID。 Tweet ID是64位整數。您應該爲tweetID列使用BIGINT數據類型。

`tweetID` BIGINT UNSIGNED 

您得到2147483647特殊值是因爲當64位鳴叫ID被轉換爲32位signed int所有的高位截斷。如果你可以使用unsigned int這個數字會更高。但不超過2147483647*2。 Tweet ID比這要高得多。你必須使用64位unsigned int

另外我看到你正在使用一個動態表名稱插入查詢。不要那樣做!在遇到性能問題之前,一張表可以容納很多行。

+0

哦,我每天的代表封頂! –

+1

澄清,2147483647是一個有符號的32位整數可以容納的最大值。 64位有符號整數最多可以容納2147483648^2 - 1。 –

+0

上帝,我覺得自己很愚蠢,就像那樣簡單。感謝您的幫助。更改爲64位的作品,如魅力 – user1711576

相關問題