2016-08-04 26 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'].""; 

制限は、私がOFFSETを残す場合は、すべてのボタンのクリック3により増加し、それは動作しますが、それはだけではなく、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/how-can-i-prevent-sql-injection-in-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'].""; 

OFFSET0競合。

+0

偉大な、それは動作します。病気は9分であなたの答えを受け入れる – twan

0

同じクエリでは、制限x、x、オフセットXの両方を使用しているようです。

オフセット部分を削除し、limit X、xを使用してみてください。

+0

あなたは両方のクエリで使用することができます。実際には、limitはクエリ内にあるときにのみオフセットを使用できます。 – twan