2016-08-04 68 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