0

我正在尝试使用 #query1 语法在第二个查询中使用第一个查询的结果。

例如

fql?q={"query1":"SELECT uid2 FROM friend WHERE uid1=me()","my name":"SELECT name FROM profile WHERE id IN (SELECT uid2 FROM #query1)"}

我可以看到这在https://developers.facebook.com/tools/explorer的 fql 查询模拟器中运行良好。

但是当我尝试通过 PHP 发送此查询时,我无法运行它。代码:

$fql_multiquery_url = 'https://graph.facebook.com/'
    . 'fql?q={"query1":"SELECT+uid2+FROM+friend+WHERE+uid1=me()","my+name":"SELECT+name+FROM+profile+WHERE+id+IN+(SELECT+uid2+FROM+#query1)"'
    . '&access_token=' . $access_token;
  $fql_multiquery_result = file_get_contents($fql_multiquery_url);
  $fql_multiquery_obj = json_decode($fql_multiquery_result, true);

我认为 # 之前的 + 有一些问题。

4

1 回答 1

0

首先,强制性的责骂:你不应该file_get_contents()用来查询 Facebook API。使用 SDK 或 cURL。

使用 PHP,诀窍是您不应该手动编码任何内容。编写可读文本并使用 PHP 内部函数为您编码。

$queries = array(
      'query1' => 'SELECT uid2 FROM friend WHERE uid1=me()',
      'myname' => 'SELECT name FROM profile WHERE id IN (SELECT uid2 FROM #query1)'
      //^ spaces aren't allowed in FQL query names.
    );
$params = array(
       'q' => json_encode($queries),
       'access_token' => $access_token
);
$url = 'https://graph.facebook.com/fql?' . http_build_query($params);
于 2013-06-21T13:23:25.037 回答