3

Twitter 搜索 API 返回一个 JSON 对象,其中包含一条推文的唯一 ID:

[id] => 2.9851634017882E+17
[text] => foobar

我在我的数据库中创建了一个 MySQLbigint(20)字段来存储 ID。但是,当我尝试存储 id 时,在数据库中它只说2(在这种情况下)。

我究竟做错了什么?

4

4 回答 4

2

对于调用中的每个 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 时id_str被优先考虑id并且不易出错。

于 2013-02-05T10:01:01.490 回答
1

MySQL 不理解2.9851634017882E+17为,INT因为它不是。它将数字截断为从输入开头找到的最长整数,即2. 您需要将其作为 int 而非科学记数法放入查询中。此外,如果这正是您从 Twitter 获得的信息,那么您甚至都不知道 ID,因为该数字的精确度不会下降到那个位置。

于 2013-02-04T20:15:23.190 回答
1

你得到的 ID 是一个浮点数。如果 twitter 给你浮动作为 ID,我会感到非常惊讶。

您确定 JSON 对象没有被将所有整数转换为浮点数的东西解析吗?当您修复该问题时,保存值的问题将得到解决。

于 2013-02-04T20:17:11.063 回答
1

Twitter ID 被分类为64-bit integers. 像这样存储它们是最好的做法。在 MySQL 中,它的数据类型是BIGINT.

因为不同的 JSON 解释器难以解析BIGINT我的首选方法是根据他们的规范使用提要:

...考虑尽快转换为 _str 版本的 ID。

作为 JSON 消费者,我会解释_strid 的版本并将这个“安全”值插入到您的 BIGINT 列中。

于 2017-06-01T19:19:50.450 回答