限制所有MySQL查询的结果


Limit results of all MySQL queries

我写了一个PHP/MySQLi前端,用户可以在其中输入SQL查询,然后服务器在表中返回结果(或在INSERTs和UPDATEs上打印OK)

由于在具有约160万部电影、190万名演员和320万个关键字的IMDb提取中打印结果可能需要很长时间(例如SELECT * FROM movies),我通过取消50次迭代后循环的打印,将输出限制为50行。

然而,查询本身也需要相当长的时间,所以我希望可以设置全局最大行返回值,不管是否使用LIMIT关键字。我只是想把服务器用于我自己的练习,但由于班上的一些人正在为老师提供的前端(Windows EXE,但班上一半的人使用Mac/Linux)而苦苦挣扎,我决定让他们也可以访问它。但我想防止我的Debian虚拟机崩溃,因为——好吧,基本上这将是一个DDoS。

为了澄清(全局限制为50的示例):

SELECT * FROM movies;
> First 50 rows
SELECT * FROM movies LIMIT 10;
> First 10 rows
SELECT * FROM movies LIMIT 50,100;
> 50 rows (from 50 to 99)

是否有可能使用PHP/MySQLi或MySQL服务器本身来限制返回值的数量?还是我必须在查询中添加/替换LIMIT

您可以使用这些查询并将"LIMIT 50"添加到其中。

如果他们自己添加了LIMIT,只需用正则表达式过滤掉,然后仍然添加您的LIMIT。

我认为无论如何都必须为自己构建一个分页器,我认为避免使用LIMIT语句是不可能的。

以下是我对寻呼器的建议:

if($_REQUEST['page'] == ""){
 $page = 1;
}else{
 $page = $_REQUEST['page']; // perhaps double check if numeric
}
$perpage = 50;
$start = ($page - 1) * $perpage;
$limit_string = " LIMIT ". $start . "," . $perpage ;
$query = "SELECT * FROM movies";
$query .= $limit_string;

希望对有所帮助

您可以创建一个函数。https://dev.mysql.com/doc/refman/5.0/en/create-function.html

如果这有帮助,请告诉我们。