2011-06-09 41 views
1

有一個簡單的頁面,可以從MySQL獲取結果並將其顯示在表格中。我已經對結果啓用了分頁,並允許用戶設置每頁顯示的結果數。我傳遞兩個querystring值來處理這個:'page'和'count'。分頁結果:處理無效的傳遞數據

然後我使用這些值來計算我的MySQL查詢的LIMIT值,使用SQL_CALC_FOUND_ROWS指令,然後通過調用SELECT FOUND_ROWS();來獲得結果總數。這一切都很好。

現在,我想驗證查詢字符串值。由於我正在爲數組中的'count'的結果/頁面值存儲可能的「正確」值,因此我只檢查傳遞的'count'值是否在該數組中,並且如果沒有將其設置爲默認值。對於'頁面'值,我有一點心理障礙...爲了確定是否有任何結果傳遞'頁面',這意味着它是「正確的」,我需要去數據庫和首先找到結果計數,但由於我只想去分貝一次,我需要包括LIMIT's,這是基於傳遞的'page'值...雞和雞蛋。我對如何解決這個一對夫婦的想法:

  1. 運行查詢,如上面的編碼,如果((「頁」 - 1)*「計數」)的結果比從SELECT FOUND_ROWS();返回的值越大,重新運行查詢,並將新的LIMIT設置爲0,count。

  2. 獲取完整的結果集,驗證傳遞的頁面是否正確,然後用LIMIT值從數據庫中進行另一次拉取。

我寧願不回到數據庫,但正如我剛纔提到的,在這個相當普遍的問題上有一個心理障礙。

感謝,

保羅

回答

0

我結束了使用上面的第一個解決方案 -

  1. 如上運行的編碼查詢,如果(( '頁' - 1)*' count')結果大於從SELECT FOUND_ROWS()返回的值;重新運行查詢,並將新LIMIT的值設置爲0 count。

這並不完美,因爲在傳遞的頁面值不好的情況下需要第二次數據庫拉取,但假設這是一個意外的情況,只是由用戶故意通過不良數據觸發,這是可以接受的。如果其他人有更好的解決方案,我很樂意重新提出這個問題。