首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当搜索项为非拉丁文字符串时,不返回所有条目的分页问题

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

Stack Overflow用户
提问于 2011-07-25 11:10:26
回答 1查看 52关注 0票数 1

我正在对我的脚本进行分页,它基于一个搜索词对结果进行分页,但是我想出了一个小问题。

当搜索词是像笔记本电脑这样的英文字符串时,它的工作效果很好。

当单词不是英语时,(希腊语)甚至输出正确的匹配数,它只向我显示包含10个结果的第一页。当我单击第2页或下一页时,它会再次显示正确的匹配数,但它不会显示任何匹配项。如果我从第2页单击到第1页,那么它将再次显示第一页的结果。因此,通常只有第一页(登陆)工作。

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

谢谢您的时间和答复。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-25 11:32:46

首先,您可以捕获无转义输入的SQL注入攻击。那么,我认为您的搜索项可能会破坏SQL查询。尝试使用字符串

代码语言:javascript
复制
$all = mysql_real_escape_string(implode(" +",$words)); 

页面可能只是数字,这样就安全了:

代码语言:javascript
复制
$page = (int) $_GET['page'];

没有转义字符串。

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

代码语言:javascript
复制
$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)";

如果在WHERE子句中已经包含了AND products.shopid = shops.id,则不需要将它包含到WHERE子句中。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6815151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档