Twitter seach API返回一个JSON对象,a.o。包含推文的唯一ID:
[id] => 2.9851634017882E+17
[text] => foobar
我在我的数据库中创建了一个MySQL bigint(20)
字段来存储id。但是,当我尝试存储id时,在数据库中只显示2
(在本例中)。
我做错了什么?
答案 0 :(得分:1)
MySQL不会将2.9851634017882E+17
理解为INT
,因为它不是。它将数字截断为从输入开头找到的最长整数,即2
。您需要将其作为int放入查询中,而不是科学计数法。此外,如果这正是您从Twitter获得的,那么您甚至不知道ID,因为该数字的精确度不会下降到那个地方。
答案 1 :(得分:1)
对于调用中的每个id,我建议在将值发送给PHP之前将值转换为字符串。
我用我自己的webapp做这件事,效果很好。我遇到了与API完全相同的问题。
<强>离。将jquery与Twitter API一起使用
$.getJSON('https://api.twitter.com/1.1/search/tweets.json?q=api&callback=?', function(data){
$.each(data, function() {
this.id_str = this.id_str + ""; // cast integer as string to avoid PHP int to float conversion on json_decode
/* ... more API parsing code ... */
还要确保捕获id_str
值,而不是id
值。 id_str
优先于id
,在处理较大的ID时为less error prone。
答案 2 :(得分:1)
Twitter ID分类为64-bit integers
。这样存储它们是最好的行动方案。在MySQL中,数据类型为BIGINT
。
由于不同的JSON解释器难以解析BIGINT
,我首选的方法是根据规范使用Feed:
...考虑尽快转换为ID的_str版本 可能的。
作为JSON使用者,我会解释id的_str
版本,并插入这个&#34; safe&#34;值进入BIGINT列。
答案 3 :(得分:0)
你得到的身份证是一个浮动。如果推特给你花车作为ID,我会非常惊讶。
您确定JSON对象未被将所有整数转换为浮点数的东西解析吗?当您修复它时,将解决保存值的问题。