2014-02-28 52 views
0

目前我的數據庫中有12行。 添加所有這些之間我刪除了一些,所以ID列沒有正確升序。SQL - 使用限制失敗選擇

我運行下面的查詢創建使用SQL $page頁是$_GET是數字(1,2,3等):

"SELECT * 
FROM cms_guestbook 
WHERE moderated = 'Y' 
ORDER BY id DESC 
LIMIT ". (($page - 1) * 5) . ", " . (5 * $page) 

添加第1頁會顯示正確,當我var_dump此查詢顯示:LIMIT 0, 5。 添加第2頁無法正常顯示。我看到7行(5-12),但我的var_dump說:LIMIT 5, 10

第3頁也正確顯示第10-12行。 var_dump也說:LIMIT 10, 15

有人知道我做錯了什麼?謝謝!

+0

$ page ='1; drop table cms_guestbook; - ' – Ray

+1

我認爲@Ray試圖讓你知道的是你的代碼可能會受到SQL注入的影響。 https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet – csi

+0

我熟悉SQL注入。這只是一個測試案例。我總是使用PDO準備的語句。 – ronnyrr

回答

3

LIMIT需要2個參數 - OFFSET,行數。

在你的情況,你想......

LIMIT 0, 5 
LIMIT 5, 5 
LIMIT 10, 5 

如果你一直想每次返回5行,但在不同的索引開始。

根據您的問題,LIMIT子句更改爲

LIMIT ". (($page - 1) * 5) . ", 5" 

退房MySQL Select & Limit details獲取更多信息。