首页 > 编程语言 >php全文搜索代码

php全文搜索代码

时间:2024-12-23 16:56:25浏览次数:4  
标签:search PHP term stmt echo content 搜索 php 全文

在PHP中实现全文搜索,你可以使用多种方法,具体取决于你的数据存储方式和需求。如果你的数据存储在MySQL数据库中,你可以利用MySQL的全文搜索功能(FULLTEXT)。如果你需要更复杂的搜索功能,可能需要结合Elasticsearch等搜索引擎。

下面是一个简单的例子,展示如何使用MySQL的FULLTEXT索引和PHP来实现全文搜索。

1. 创建数据库和表

首先,创建一个包含一些数据的MySQL表,并添加一个FULLTEXT索引。

CREATE DATABASE fulltext_search_demo;

USE fulltext_search_demo;

CREATE TABLE articles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    FULLTEXT (title, content)
);

INSERT INTO articles (title, content) VALUES
('Introduction to PHP', 'PHP is a popular general-purpose scripting language that is especially suited to web development.'),
('PHP and MySQL', 'PHP is often used together with MySQL. MySQL is a popular open source relational database management system.'),
('PHP Best Practices', 'Following best practices in PHP development can help you write more secure, maintainable, and efficient code.'),
('Learn PHP in 7 Days', 'This tutorial will teach you PHP in just 7 days.');

 

2. 使用PHP进行搜索

接下来,编写PHP代码来执行搜索查询并显示结果。

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "fulltext_search_demo";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// 获取搜索关键词
$search_term = isset($_GET['search']) ? $_GET['search'] : '';

if (!empty($search_term)) {
    // 预处理和绑定
    $stmt = $conn->prepare("SELECT id, title, content FROM articles WHERE MATCH (title, content) AGAINST (:search_term IN NATURAL LANGUAGE MODE)");
    $stmt->bind_param(":search_term", $search_term);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($result->num_rows > 0) {
        echo "<h2>Search Results:</h2>";
        while($row = $result->fetch_assoc()) {
            echo "<h3>" . htmlspecialchars($row["title"]) . "</h3>";
            echo "<p>" . htmlspecialchars(substr($row["content"], 0, 200)) . "...</p>";
            echo "<hr>";
        }
    } else {
        echo "<p>No results found.</p>";
    }

    $stmt->close();
} else {
    echo "<h2>Search for articles:</h2>";
    echo "<form method='get' action='<?php echo $_SERVER["PHP_SELF"]; ?>'>";
    echo "<input type='text' name='search' placeholder='Search term'>";
    echo "<input type='submit' value='Search'>";
    echo "</form>";
}

// 关闭连接
$conn->close();
?>

3. 运行代码

将上述PHP代码保存到一个文件中(例如search.php),然后在浏览器中访问该文件。你会看到一个简单的搜索表单。输入搜索词并提交表单,你应该能看到与搜索词匹配的文章标题和内容摘要。

注意事项

  1. 性能:对于大型数据集,MySQL的FULLTEXT索引可能不是最快的解决方案。在这种情况下,考虑使用专门的搜索引擎如Elasticsearch。
  2. 安全性:在实际应用中,应该使用更安全的方法来处理用户输入,例如防止SQL注入和XSS攻击。上面的代码使用了htmlspecialchars来防止XSS攻击,但更健壮的做法是使用PDO或MySQLi的预处理语句来防止SQL注入。
  3. 配置:确保你的MySQL服务器和表配置正确,以支持FULLTEXT索引。

这个例子只是一个简单的起点,你可以根据需要进一步扩展和改进它。

 

 

追加:

(SELECT id, content FROM posts WHERE MATCH (content) AGAINST ('search query' IN BOOLEAN MODE))
UNION
(SELECT id, content FROM comments WHERE MATCH (content) AGAINST ('search query' IN BOOLEAN MODE));

 

追加模糊查询:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "your_database";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// 获取搜索关键词
$search_term = isset($_GET['search']) ? $_GET['search'] : '';

// 为了进行模糊查询,我们在搜索词前后添加通配符 '%'
$search_term_escaped = $conn->real_escape_string("%" . $search_term . "%");

if (!empty($search_term)) {
    // 执行查询
    $sql = "SELECT id, title, content FROM articles WHERE (title LIKE ? OR content LIKE ?)";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("ss", $search_term_escaped, $search_term_escaped);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($result->num_rows > 0) {
        echo "<h2>Search Results:</h2>";
        while($row = $result->fetch_assoc()) {
            echo "<h3>" . htmlspecialchars($row["title"]) . "</h3>";
            echo "<p>" . htmlspecialchars(substr($row["content"], 0, 200)) . "...</p>";
            echo "<hr>";
        }
    } else {
        echo "<p>No results found.</p>";
    }

    $stmt->close();
} else {
    echo "<h2>Search for articles:</h2>";
    echo "<form method='get' action='<?php echo $_SERVER["PHP_SELF"]; ?>'>";
    echo "<input type='text' name='search' placeholder='Search term'>";
    echo "<input type='submit' value='Search'>";
    echo "</form>";
}

// 关闭连接
$conn->close();
?>

 

标签:search,PHP,term,stmt,echo,content,搜索,php,全文
From: https://www.cnblogs.com/cblx/p/18624458

相关文章

  • 利用Python爬虫高效获取苏宁商品信息:按关键字搜索的实战指南
    在信息爆炸的今天,数据的获取和处理能力成为了衡量一个企业竞争力的重要指标。对于电商平台而言,如何快速、准确地获取商品信息,成为了提升运营效率的关键。本文将详细介绍如何使用Python爬虫技术,高效地按关键字搜索苏宁商品,并提供详细的代码示例。1.Python爬虫技术概述Python......
  • 从零开始:ThinkPHP 入门教程,快速上手 Web 开发
    从零开始:ThinkPHP入门教程,快速上手Web开发在当今的Web开发领域,选择合适的框架可以显著提高开发效率和代码质量。ThinkPHP作为一款轻量级的PHP开发框架,因其简洁易用和高效的性能而受到广泛欢迎。本教程将带领你从零开始,快速上手ThinkPHP,掌握基本的Web开发技能。......
  • 【递归,搜索与回溯算法 & 综合练习】深入理解暴搜决策树:递归,搜索与回溯算法综合小专题(
       优美的排列  题目解析     算法原理     解法 :暴搜     决策树   红色剪枝:用于剪去该节点的值在对应分支中,已经被使用的情况,可以定义一个check[]紫色剪枝:perm[i]不能够被i整除,i不能够被perm[i]整除,此时分......
  • 网站结构优化:提升用户体验与搜索引擎排名的关键策略
    在当今数字化时代,网站不仅是企业展示形象和服务的重要窗口,更是与用户进行互动和交易的核心平台。一个结构清晰、易于导航的网站不仅能够提升用户体验,还能显著提高搜索引擎的排名,从而吸引更多的流量和潜在客户。本文将深入探讨网站结构优化的重要性、基本原则以及具体策略,旨在......
  • 问答网站地图优化:提升用户体验与搜索引擎效率的艺术
    在当今信息爆炸的时代,问答网站作为用户获取知识和解答疑问的重要平台,其内容的组织与呈现方式对于提升用户体验和搜索引擎效率至关重要。网站地图作为网站的导航蓝图,不仅帮助用户快速定位所需信息,还是搜索引擎理解和索引网站内容的关键工具。本文将深入探讨问答网站地图的优化......
  • 【PHP安全】php程序源码保护技术
    一、基本介绍二、加密方式2.1源码混淆处理2.1.1PHP威盾混淆2.1.2php-obfuscator2.2YAKPro混淆处理2.3源码外壳加密2.3.1PHPEval加密2.3.2PHPEval变异2.3.3phpjiami处理2.4源码扩展加密2.4.1ph......
  • php8新特性
    <?phpheader("Content-type:text/html;charset=utf-8");ini_set('error_reporting',E_ALL);ini_set("display_errors","On");//打开错误提示ini_set('memory_limit','-1');set_time_limit(0);//函数只接受整数或浮......
  • 如何高效调整网站新闻发布时间以提升搜索引擎排名
    在网站运营过程中,新闻时间的准确性和及时性对于用户体验和搜索引擎优化(SEO)都至关重要。正确地修改新闻时间不仅可以确保信息的时效性,还能帮助网站在搜索引擎中获得更好的排名。以下是修改网站新闻时间的具体步骤和注意事项:确定需求与目标在修改新闻时间之前,首先明确修改的目......
  • php反序列化
    PHP反序列化漏洞一、基础知识php面向对象的基本概念类与对象classhero{var$name;#var默认是publicpublic$sex;function(){echo$this->name;#必须用this访问类内变量}}$cyj=newhero();$cyj->name='chengyaojin';#注意不是.访问$cyj......
  • [极客大挑战 2020]Roamphp1-Welcome
    [极客大挑战2020]Roamphp1-Welcome一打开靶机发现无法正常访问通过BP抓包后修改为POST方式请求,就能正常进入了代码里可以看到,如果不是POST方式的话会报405接着是参数判断,如果roam1和roam2参数都没有设置的话会显示源代码,这个很简单,我们直接看下一个if判断这里roam1和roam......