2016-08-04 70 views
-2

我想每次增加3的偏移量,所以我使用了一個每次單擊按鈕(使用ajax)增加3的變量。SQL OFFSET語法錯誤

但是,當使用OFFSET時,我總是收到語法錯誤。

這是正確的方法嗎?

$web = "SELECT * FROM `db` WHERE catid = 9 AND state = 1 ORDER BY ordering LIMIT 0,".$_POST['limit']." OFFSET ".$_POST['limit'].""; 

限制每按一下按鈕增加了3,如果我離開了OFFSET,它的工作原理,但它一直再次加載,而不是僅僅3個新項目的所有項目。

我的錯誤:

There was an error running the query [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OFFSET 3' at line 1]

+2

除了戈登的答案;你在這裏打開SQL注入。 –

+2

像@ Fred-ii-說的,[Little Bobby](http://bobby-tables.com/)說*** [你的腳本有SQL注入攻擊的危險。](http://stackoverflow.com/問題/ 60174 /何燦I-防止-SQL注入式-PHP)***。即使[轉義字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! –

+0

優先考慮預防SQL入侵的語句。或者將$ _POST ['limit']顯式轉換爲PHP中的整數並將其插入到字符串中。這與引用字符串類似,但是對於數字。無論如何,我總是提出準備好的語句作爲最佳解決方案,因爲它對任何數據類型都是一樣的。 – cdonat

回答

3

的語法應爲:

LIMIT ".$_POST['limit']." OFFSET ".$_POST['limit'].""; 

0衝突與OFFSET

+0

偉大的,那有效。我會在9分鐘內接受你的回答。 – twan

0

您看起來像在同一個查詢中使用限制x,x和偏移量X.

嘗試刪除偏移部分,並使用限制X,x。

+0

你可以在查詢中使用兩者。實際上,偏移只能在限制在查詢內部時使用。 – twan