2011-05-05 82 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