Handling big user IDs returned by FQL in PHP Handling big user IDs returned by FQL in PHP json json

Handling big user IDs returned by FQL in PHP


json_decode() can convert large integers to strings, if you specify a flag in the function call:

$array = json_decode($json, true, 512, JSON_BIGINT_AS_STRING)


I've resolved the issue by adding &format=json-strings to my the FQL api call, like so:

$myQuery = "SELECT uid2 FROM friend WHERE uid1=me()";$facebook->api("/fql?q=" . urlencode($myQuery) . "&format=json-strings")

This tells facebook to wrap all the numbers in quotes, which leads json_decode to use neither int-s not floats.

Because I was afraid this issue is not restricted to FQL but to all graph API calls that choose to represent some of the IDs as BIG-INTs I've went as far as patching facebook's PHP SDK a bit to force Facebook to return all of its numbers as strings.

I've added this one line to the _graph function.This would be line 738 in facebook_base.php, version 3.1.1

$params['format'] = 'json-strings';

Sure fix


I had a similar problem where json_decode was converting recent twitter/tweet IDs into exponential numbers.

Björn's answer is great if you want your BIGINT to become a string - and have PHP 5.3+. If neither of those things are true, another option is to up PHP's float precision.This can be done a different few ways...

  • find the precision value in your php.ini and change it to precision = 20
  • add ini_set('precision', 20); to your PHP app
  • add php_value precision 20 to your app's .htaccess or virtual host file