php实现音乐搜索功能
实现音乐搜索功能的方法
PHP可以通过结合数据库查询和前端交互实现音乐搜索功能。以下是一个完整的实现方案:
数据库设计
创建音乐表存储相关信息:
CREATE TABLE music (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
artist VARCHAR(255) NOT NULL,
album VARCHAR(255),
duration VARCHAR(20),
file_path VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
搜索表单
创建HTML搜索表单:
<form action="search.php" method="get">
<input type="text" name="query" placeholder="搜索歌曲或歌手">
<button type="submit">搜索</button>
</form>
搜索处理逻辑
在search.php中实现搜索功能:
<?php
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=music_db', 'username', 'password');
// 获取搜索词
$query = isset($_GET['query']) ? trim($_GET['query']) : '';
if (!empty($query)) {
// 准备SQL查询
$stmt = $db->prepare("SELECT * FROM music
WHERE title LIKE :query
OR artist LIKE :query
OR album LIKE :query");
$searchParam = "%$query%";
$stmt->bindParam(':query', $searchParam);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 显示结果
if (count($results) > 0) {
foreach ($results as $song) {
echo "<div class='song-result'>
<h3>{$song['title']}</h3>
<p>艺术家: {$song['artist']}</p>
<p>专辑: {$song['album']}</p>
<audio controls src='{$song['file_path']}'></audio>
</div>";
}
} else {
echo "没有找到匹配的音乐";
}
}
?>
高级搜索功能
实现更复杂的搜索条件:
// 多条件搜索
$title = isset($_GET['title']) ? trim($_GET['title']) : '';
$artist = isset($_GET['artist']) ? trim($_GET['artist']) : '';
$sql = "SELECT * FROM music WHERE 1=1";
$params = [];
if (!empty($title)) {
$sql .= " AND title LIKE :title";
$params[':title'] = "%$title%";
}
if (!empty($artist)) {
$sql .= " AND artist LIKE :artist";
$params[':artist'] = "%$artist%";
}
$stmt = $db->prepare($sql);
foreach ($params as $key => $value) {
$stmt->bindValue($key, $value);
}
AJAX实时搜索
实现无需刷新页面的实时搜索:
// 前端JavaScript
document.getElementById('search-input').addEventListener('input', function() {
const query = this.value;
if (query.length > 2) {
fetch(`search_api.php?query=${encodeURIComponent(query)}`)
.then(response => response.json())
.then(data => {
// 更新搜索结果
displayResults(data);
});
}
});
// PHP API端点 (search_api.php)
header('Content-Type: application/json');
echo json_encode($results);
性能优化
添加全文索引提高搜索效率:
ALTER TABLE music ADD FULLTEXT(title, artist, album);
-- 使用MATCH AGAINST进行全文搜索
SELECT * FROM music
WHERE MATCH(title, artist, album) AGAINST(:query IN NATURAL LANGUAGE MODE);
安全考虑
防止SQL注入:
// 使用预处理语句
$stmt = $db->prepare("SELECT * FROM music WHERE title LIKE ?");
$stmt->execute(["%$query%"]);
扩展功能
添加分页支持:
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$limit = 10;
$offset = ($page - 1) * $limit;
$sql = "SELECT * FROM music WHERE title LIKE :query LIMIT $limit OFFSET $offset";
这个实现方案涵盖了从基础到高级的音乐搜索功能,可以根据实际需求进行调整和扩展。







