我已经构建了一个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.对我来说没有任何意义。 任何有关正在发生的事情的帮助将不胜感激
答案 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
此外,我发现您正在为插入查询使用动态表名。不要那样做!在遇到性能问题之前,一个表可以容纳很多行。