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

时间:2011-07-25 11:10:27

标签: php character-encoding

我正在对我的脚本进行分页,根据搜索字词对结果进行分页,但我想出了一个小问题。

当搜索字词是像 laptop 这样的英文字符串时,效果很好。

当单词不是英语时,(希腊语)即使输出正确的匹配数,它也只显示第一页有10个结果。当我点击第2页或下一页时,它会再次显示正确的匹配数,但不会显示任何匹配项。如果我点击第2页到第1页,它会再次显示第一页的结果。 因此,通常只有第一个(登陆)页面有效。

我在编辑之前测试了代码以使用非拉丁字符串获取一个术语并执行相同的“错误”操作。 这是教程http://papermashup.com/easy-php-pagination/

的网址

感谢您的时间和回复。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

没有转义字符串。

然后,最重要的是:查询数据的计数和查询必须具有相同的JOIns和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)";

如果已经在HAVING子句中使用了AND products.shopid = shops.id,则不需要将ceiling($total_pages / 10)包括在内。

然后,您的第一个查询的结果不是PAGES计数,它是ROWS计数。如果您想在页面上显示10行,那么您的总页数将为{{1}}。