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
),然后在浏览器中访问该文件。你会看到一个简单的搜索表单。输入搜索词并提交表单,你应该能看到与搜索词匹配的文章标题和内容摘要。
注意事项
- 性能:对于大型数据集,MySQL的FULLTEXT索引可能不是最快的解决方案。在这种情况下,考虑使用专门的搜索引擎如Elasticsearch。
- 安全性:在实际应用中,应该使用更安全的方法来处理用户输入,例如防止SQL注入和XSS攻击。上面的代码使用了
htmlspecialchars
来防止XSS攻击,但更健壮的做法是使用PDO或MySQLi的预处理语句来防止SQL注入。 - 配置:确保你的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(); ?>
追加:UNION的使用
select * from (SELECT `id`,`subject` FROM `article` WHERE `active`='1' AND `subject` LIKE '%调整图片%' ORDER BY `add_time` DESC) as t1 union all select * from (SELECT `id`,`class_name` AS `subject` FROM `web_class` WHERE `active`='1' AND `class_name` LIKE '%调整图片%' ORDER BY `class_id` DESC) as t2 union select * from (SELECT `id`,`subject` FROM `article` WHERE `active`='1' AND (`subject` LIKE '%调整%' OR `subject` LIKE '%图片%') ORDER BY `add_time` DESC) as t3;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2015-12-23 【转】php 下载保存文件保存到本地的两种实现方法
2014-12-23 ii7安装php