1

我有一个 FB 应用程序脚本,我试图让它工作,但我收到了这个错误:

致命错误:未捕获的异常:601:解析器错误:第 37 位的意外')'。在第 658 行的 /home/altin/public_html/apps/empower/empowermix/base_facebook.php 中抛出

这是我收到错误的脚本部分:

$friendsLists = $facebook->api('/me/friends');
  foreach ($friendsLists as $friends) 
  {
   $ile=count($friends);
  }

$zapytanie=" (uid=".$friends[0]['id'].") ";
  for($i=1;$i<$ile;$i++)
  {
    $zapytanie.=" or (uid=".$friends[$i]['id'].") ";
  }

**$znajomi = $facebook->api(array("method"=> "fql.query", "query"=> "SELECT uid FROM page_fan WHERE ".$zapytanie." AND page_id='".$page_id."'")); //friends w fanpage**

$sql=mysql_query("SELECT * FROM '".$przedrostek_tab."ludzie' WHERE 'uid'=".$user_info['id']);
$czy_jest=mysql_fetch_array($sql);
foreach($znajomi as $k => $w)
      {$znajomi_weryfikacja[$k]=$w['uid'];}
if($znajomi_weryfikacja)
  {$znajomi_weryfikacja=( array_diff($znajomi_weryfikacja, explode("|",$czy_jest['znajomi_start'])));
  if($czy_jest[0])
    {foreach($znajomi_weryfikacja as $k => $w)
      {$zaproszeni_znajomi.=$w.'|';}
    mysql_query("UPDATE '".$przedrostek_tab."ludzie' SET 'zaproszeni_znajomi' = '$zaproszeni_znajomi' WHERE 'uid' =".$user_info['id']);}
  }

任何人都可以帮助提出解决方案吗?也许你们中的一些人以前可能遇到过类似的问题。

谢谢。

4

1 回答 1

1

您的代码处理 Graph API 响应和 FQL 查询的构造存在严重问题:

  1. $facebook->api('/me/friends')data返回由(包含朋友详细信息)和组成的关联数组paging。(为了明确命名这不是朋友列表,而是用户朋友列表)。
  2. 您从 API 中获得的错误与您的查询包含(uid=)inWHERE子句有关。

您可以简单地修复循环:

$friendsList = $facebook->api('/me/friends');
$friends = $friendsList['data'];
$ile=count($friends);

$zapytanie=" (uid=".$friends[0]['id'].") ";
for($i=1;$i<$ile;$i++){
  $zapytanie.=" or (uid=".$friends[$i]['id'].") ";
}
// ...

实际上,您应该了解有关 FQL 和 Graph API 的几件事:

您最好只检索需要的数据并使用IN而不是多个OR

$response = $facebook->api('/me/friends?fields=id');
$friends = $response['data'];
$uids = array();

foreach ($friends as $friend)
  $uids[] = $friend['id'];

$zapytanie = 'uid IN ('. implode(',', $uids) .')';
// ...

您也可以在单个 FQL 查询中完成这一切

$fql = <<FQL
SELECT uid FROM page_fan WHERE page_id = {$page_id} AND uid IN (
  SELECT uid2 FROM friend WHERE uid1 = me()
)
FQL;
于 2012-04-21T23:55:23.130 回答