2011-05-05 77 views
0

我打电话通过php sdk的Facebook图形API,当我通过几个嵌套的foreach循环调用并遍历数组时,它需要的时间比它甚至要长得多限制被调用记录的数量。这里是我的代码:在遍历Facebook图形API结果和写入MySQL数据库中的滞后

foreach ($userfriends['data'] as $friends) { 
    foreach ($friends as $key => $value) { 
    if($key == "id"){ 
     $friend_id = $value;  
    } 

// API CALL PULL FRIEND LIKES 
    try { 
     $username = $key; 
     $uservar = '/'.$username.'/likes?fields=id,category&limit=20'; 
     $userlikes = $facebook->api($uservar); 
    }     
    catch (FacebookApiException $e) { 
     error_log($e); 
    } 

    foreach ($userlikes['data'] as $likes) { 
     foreach ($likes as $key => $value) { 
     if($key == "id"){ 
      $like_id = $value;   
     } 
     if($key == "category"){ 
      $userlike_category_id = $value;  
     } 
     } 

// WRITING FRIEND LIKES TO DATABASE 
     $sql="INSERT INTO likes (like_id, category, friend_id) 
      VALUES ('$like_id', '$userlike_category_id', '$friend_id');"; 
     mysql_query($sql,$con); 
    }  
    } 
} 
+1

请使用带准备语句的mysqli(http://php.net/manual/en/mysqli.prepare.php),因为即使数据来自可信来源,它仍然更好地逃避它并保持自己从SQL注入安全 – 2011-05-05 22:10:03

+0

谢谢,我会补充说。任何想法,为什么这个脚本需要超过1分钟运行?我不打电话或写这么多的数据。 – mhawk 2011-05-05 22:22:58

回答

0

我会劝告这样做,以避免延迟问题。

  1. 设置合理的脚本超时长度,从API获取详细信息并缓存结果。

如果一切顺利..

  1. 拿起缓存,并插入到你的数据库。
+0

谢谢,最好的方法是什么?你能提供一些示例代码吗?我在API方面有点新兴。我感谢帮助! – mhawk 2011-05-05 23:39:47