Twitter不保存唯一的推文ID

时间:2012-12-19 23:08:05

标签: php twitter pdo

我已经构建了一个PHP脚本,可以保存散列标记搜索的结果,当我保存推文ID时,它只是尝试保存副本。 我已经在表上设置了一个UNIQUE约束,它显然不会保存除第一条推文之外的任何内容,它会抛出下面的错误。这并不奇怪

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

如果删除约束,它会正确保存所有推文,但推文ID是重复的

我已经尝试在输出中显示推文来自我用来放入表中的相同变量,并且它都是UNIQUE并且正确所以变量是正确的。所以我只能假设一些奇怪的东西一直在发生

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.对我来说没有任何意义。 任何有关正在发生的事情的帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

此号码2147483647清楚地表明您没有使用 64位整数来存储推文ID。 Tweet ID是 64位整数。您应该使用BIGINT列的tweetID数据类型。

`tweetID` BIGINT UNSIGNED

您获得的特殊值2147483647是因为当 64位推文ID被强制转换为 32位 {时,所有高位都会被截断{1}}。如果你可以使用signed int这个数字会更高。但不超过unsigned int。 Tweet ID远高于此。您必须使用64位2147483647*2

此外,我发现您正在为插入查询使用动态表名。不要那样做!在遇到性能问题之前,一个表可以容纳很多行。