2013-06-18 1 views
0

# query1 구문을 사용하여 두 번째 쿼리에서 첫 번째 쿼리의 결과를 사용하려고합니다.PHP에서 다중 FQL 쿼리를 Hashtag와 함께 사용하는 방법

예.

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

fql 쿼리 시뮬레이터 https://developers.facebook.com/tools/explorer에서 제대로 작동하는 것을 볼 수 있습니다.

하지만이 쿼리를 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); 

나는 # 전에 + 몇 가지 문제가있다 생각합니다.

+0

그래서 공백과 같은 특수 문자를 URL 인코딩했는데 그대로 #을 남겼습니다 - 왜 그런가요? – CBroe

+0

공백을 +로 바꾸는 것은 FB Doc에 표시됩니다. #을 어떻게 인코딩해야합니까? –

답변

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);