2011-04-06 17 views
0

而不是硬编码查询:限制3,我想每次按下按钮时都会获得LIMIT号码。MYSQL可以改变如何动态地限制结果吗?

这就是我这么远:

$region=$_GET["region"]; 

$number=$_GET["limit"]; 

$con = mysql_connect('localhost') or die(mysql_error()); 
mysql_select_db('test') or die(mysql_error()); 

$sql1="SELECT size,price,member FROM buy WHERE region= '".$region."' LIMIT = '".$number."' ORDER BY price DESC " 

错误我得到的是:

警告:mysql_fetch_array()预计参数1是资源

所以LIMIT是空的

所以我得到了两个按钮:一套$ number = 3另一套$ number = 10但我不知道如何将它放入SQL中。

到目前为止只有选项WHERE region= '".$region."'有效。

任何想法?

+0

此代码例如,下面的建议一起,是开放的SQL注入,除非PHP有$ _GET变量的一些特殊待遇。一种修复方法是使用(string)(int)$ number。变量$ region也需要被检查。我认为,addslashes($ region)是一种方式 - 不是很擅长PHP。 – kek 2011-04-06 12:33:04

+0

(string)(int)$ number?怎么样(int)$数字字符串的点是什么? – dogmatic69 2011-04-06 13:23:25

+0

你是对的,我认为它需要是一个字符串,以便能够与其他字符串结合使用。运营商。 – kek 2011-04-06 13:37:50

回答

3

首先 - 删除限制编号附近的报价。

二,删除号码前的=

三 - 后ORDER BY

移动LIMIT我认为是所有:)

$sql1="SELECT size,price,member FROM buy WHERE region= '".$region."' ORDER BY price DESC LIMIT ".(int) $number 
+1

Adn不要忘记逃离你的'$ region' :) – Emmerman 2011-04-06 12:30:18

+0

感谢你!你是男人! – lucas 2011-04-06 12:32:24

1

的几点这里:

  • MySQL的LIMIT语句可以采取两者施加限制和OFFSET,这是分页所需的基础知识。请参阅MySQL SELECT Syntax
  • 您确定在URL上设置了限制变量吗?您正在使用$ _GET ['limit'],但如果它不在URL上,它将不会有值,并且会破坏您的查询。尝试显示/记录SQL语句以查看发生了什么。
  • 理想情况下,你也应该消毒所有的$ _GET变量,并确保它们是有效的