【发布时间】:2017-03-09 16:31:43
【问题描述】:
我想创建一个通过预设排名显示结果的搜索引擎。评分由两部分组成 1. 帖子浏览量(用“post”表中的POP [INT]表示)和文本本身的字数(用“post”表中的TXT [STRING]表示)。
也就是说如果有三个结果
//$search = 'apple macbook';
- 3 个匹配项 (POP) 和 3 个相关关键字(2 个 MACBOOK,1 个在 TXT 中找到的 APPLE)= 6 - 将首先显示
- 2 个点击 (POP) 和 3 个相关关键字(1 个 MACBOOK,1 个 APPLE 在 TXT 中找到)= 5 - 将显示 第二个
- 2 个点击 (POP) 和 1 个关键字相关(在 TXT 中找到 1 个 APPLE)= 3 - 将显示 第三个
我的代码:
$search = isset($_GET['s']) ? htmlspecialchars($_GET['s']) : '';
$search = strtoupper($search);
$search = strip_tags($search);
$search = trim($search);
$words = explode(' ', $search);
$words_condition = array();
$arguments = array();
foreach ($words as $word) {
$words_condition[] = 'TXT LIKE ?';
$arguments[] = '%'.$word.'%';
}
$query = $db->prepare("SELECT * FROM `post` WHERE ".implode(" OR ",
$words_condition)." ORDER BY POP DESC"); $query->execute($arguments);
关于我的表结构(“post”表)有 4 列...
- ID [INT] 2. SUB(帖子主题)[STRING] 3. TXT(正文/全文)[STRING] 4. POP [INT](访问此帖子的点击次数)。
【问题讨论】:
-
你能给我们你的表结构吗?
-
您没有以正确的方式使用准备好的语句。通过简单地连接搜索词,您仍然容易受到 sql 注入的攻击
-
@Philipp 感谢您的评论。关于我的表结构(“post”表)有 4 列... 1. ID [INT] 2. SUB(帖子的主题) [STRING] 3. TXT(正文/全文)[STRING] 4. POP [INT](访问此帖子的点击次数)。
-
@philipp 有什么想法吗?
标签: php mysql search pdo keyword