2013-06-27 50 views
1

我已經使用Slim PHP設置我的API。這是獲取所有事件的基本GET請求。我想用Backbone Paginator對此進行分頁。我的主要問題是...如何修改我的SELECT語句以接受來自Backbone中分頁集合的參數?似乎沒有詳細說明如何設置API以接收來自paginator的這些請求。 This post是最接近我可以來,但沒有說明你實際上從數據庫中請求什麼。它只是一個基本的「如果這個參數存在,將它添加到MySQL聲明?」似乎應該有更好的方法。如何設置MySQL查詢以接收Backbone分頁請求?

$app->get('/events', 'getEvents'); 


function getEvents() { 
    // what do I do with the $sort variable? 
    $sort = $app->request()->params('sort'); 
    $sql = "SELECT * FROM events"; 

    try { 
     $db = getConnection(); 
     $stmt = $db->query($sql); 
     $events = $stmt->fetchAll(PDO::FETCH_OBJ); 
     $db = null; 
     echo json_encode($events); 
    } catch(PDOException $e) { 
     echo '{"error":{"text":'. $e->getMessage() .'}}'; 
    } 
} 

回答

1

我不是PHP開發人員,但您確實需要在查詢中實現分頁。

有關信息,請參閱MySQL Data - Best way to implement paging?

至於後你聯繫,你可以按照提交者的定義您的查詢,其中包括限制方法:

// where $results is the number of results to return 
$sql = "select * FROM events ORDER BY " . $sort . " LIMIT " . $page . " , $results"; 

爲存在/參數不存在,你總是可以默認設置。因此,如果沒有請求頁面,請提供第一個,如果沒有請求排序,請按照您的應用的任何合理順序排序。如果有額外的參數,你可以丟棄它們。

如果你想有一個非常嚴格的API,你可以隨時返回一個錯誤,如果該請求不符合終點標準

+0

謝謝,我想我會做這樣的事情:'如果($頁){。 ..}其他{$ page = 0}'。我想我不確定是否有某種快捷方式或輔助函數可以做到這一點,但聽起來好像是SQL和PHP if語句。涼。謝謝。 – bentedder