当搜索项是非拉丁字符串时,分页不能返回所有条目的问题


Problem with pagination that does not return all the entries when the search term is non latin string

我的脚本有一个分页,它根据搜索词对结果进行分页,但是我遇到了一个小问题。

当搜索词是一个英文字符串,如laptop,它工作得很好。

当单词不是英语(希腊语)时,即使它输出找到的正确匹配数,它也只显示包含10个结果的第一页。当我单击第2页或下一页时,它再次显示正确的匹配数量,但它不显示任何匹配。如果我从第2页点击到第1页,它会再次显示第1页的结果。所以,一般来说,只有第一个(登陆)页面有效。

我在编辑之前测试了代码,以获取一个非拉丁字符串的术语,并做了同样的"错误"的事情。这是教程的url http://papermashup.com/easy-php-pagination/

感谢您的回复。

首先,您可以通过无转义输入捕获SQL注入攻击。然后,我认为你的搜索词可能会打破SQL查询。尝试使用mysql_real_escape_string:

$all = mysql_real_escape_string(implode(" +",$words)); 

页面可能只有数字,然后可以安全地执行:

$page = (int) $_GET['page'];

不转义字符串。

然后也是最重要的:查询计数和查询数据必须有相同的join和WHERE参数。如果在一个表中搜索匹配项,可以得到100行。然后尝试将它与另一个表连接,其中只找到10行。您将只得到10行数据和100行页面。

$query = "SELECT COUNT(some_id_column) as num FROM products JOIN shops 
ON products.shopid = shops.id WHERE MATCH (name) AGAINST ('+" . $all . "' IN BOOLEAN MODE)";

你不需要包括AND products.shopid = shops.id到你的WHERE子句,如果你已经有它在HAVING子句。

那么,第一个查询的结果不是PAGES计数,而是ROWS计数。如果您想在一个页面上显示10行,那么您的总页数将是ceiling($total_pages / 10)