我正在尝试在MySQL查询中获取变量。
$filter = $_GET['fltr'];
require_once('core/dbconnect.php');
if($filter)
{
$limit = 'LIMIT '. $filter;
}
$lastonline = mysql_query("SELECT * FROM logins ORDER BY time DESC GROUP BY username '$limit'");
现在问题出在我在查询中放入“ $ limit”的地方。那是行不通的,但是正确的方法是什么呢?
现在几乎可以正常工作,因为我得到的结果不是绝对正确的结果。
我将代码更改为此:
$filter = $_GET['fltr'];
require_once('core/dbconnect.php');
if($filter)
{
$limit = 'LIMIT '. (int) $filter;
}
$lastonline = mysql_query("SELECT * FROM logins GROUP BY username ORDER BY time DESC {$limit}");
如您所见,我不得不更改GROUP BY和ORDER BY,因为那是行不通的。
我之所以按此顺序进行排序是有原因的,因为现在它首先按用户名分组,但不再取出最后一个登录名。
是否有人知道此查询中最后一个问题的解决方案?
感谢您提前提供的所有帮助!
最佳答案
一些东西:
您需要在LIMIT和数字之间留一个空格;
您需要解决您的sql注入问题,例如,将用户发送的变量强制转换为int
;
您需要删除LIMIT语句中sql语句中的引号;
您需要先分组才能下订单,因此您需要切换这两个。
因此结果将是:
if($filter)
{
$limit = 'LIMIT '. (int) $filter;
}
$lastonline = mysql_query("SELECT * FROM logins GROUP BY username ORDER BY time DESC {$limit}");
并且您应该切换到PDO或mysqli并使用已准备好的语句,因为不建议使用
mysql_*
函数。编辑:根据manual在第4点展开:
通常,所使用的子句必须严格按照
语法说明。例如,必须在HAVING子句之后
任何GROUP BY子句以及任何ORDER BY子句之前。
所以
ORDER BY
在GROUP BY
之后。关于php - mysql查询,分组和排序中的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17129368/