2009-07-01 69 views
1

HI,ORDER BY日期,而在一个MySQL查询还使用LIMIT - PHP

我不能完全想出解决办法,我想拉记录从MySQL,责令其反向按时间顺序和限制结果到每页四个(并使用分页来组织页面)。这是目前返回此错误:

致命错误:SQL在/Users/allan/Sites/4is_site/casestudylist.php线126

$limit = 'LIMIT ' .($pageno - 1) * $rows_per_page .',' .$rows_per_page; 
$query = "SELECT * FROM studies ORDER BY date desc WHERE niche = '{$_GET['niche']}' $limit"; 

分页一直很好,只是现在我我试图添加ORDER BY,我遇到了问题。

+0

此外,我听说我需要逃避这一点:'{$ _GET ['niche']}',我该怎么做? – user96828 2009-07-01 04:57:03

回答

8

该语法不正确。这应该工作。

$escapedNiche = mysql_real_escape_string($_GET['niche']); 
$query = "SELECT * FROM studies WHERE niche = '$escapedNiche' ". 
     "ORDER BY date DESC $limit"; 

以供将来参考 - SELECT Syntax

0

BTW为了逃避$ _GET [ '小众']:

$clean_niche = mysql_escape_string($_GET['niche']); 
$limit = 'LIMIT ' .($pageno - 1) * $rows_per_page .',' .$rows_per_page; 
$query = "SELECT * FROM studies " 
     ."WHERE niche = '{$clean_niche}' " 
     ."ORDER BY date desc $limit"; 

这将有助于保护您免受SQL注入攻击的转义$字符_GET [ '利基']。

为了提高安全性,请考虑使用绑定参数(google'em)和/或库函数(如Zend DB)来访问数据库。

+0

mysql_escape_string只有在输入被引号包围时才会清理输入。要清理限制,可以使用is_numeric()验证“niche”参数是一个整数。 – diedthreetimes 2011-04-11 02:22:40