You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于标题关键词修改PHP代码以展示相关主题?

问题

现有一段展示最新主题的PHP代码,希望修改为仅根据标题的部分内容或单个关键词展示相似主题。现有代码如下:

<?php
  $fresh_song = $database->query('SELECT tag
    FROM search
    ORDER BY id DESC
    LIMIT ' . $freshsong)->fetchAll(PDO::FETCH_ASSOC);
  //var_dump($fresh_song);
  foreach ($fresh_song as $fsong) {
    //   print_r($fsong);
    $fsong = ucwords($fsong['tag']);
    ?>
    <a  href="<?php echo mp3_url($fsong); ?>" title="<?php echo toAscii($fsong); ?> mp3" class="list-group-item"><?php echo toAscii($fsong); ?></a>
    <?php
  }?>

另外还有一段获取当前标题的代码:

<?php echo (isset($final_result[0]))?$final_result[0]['title']:''; ?>

请问是否可以实现该需求?

解决方案

当然可以实现,按以下步骤修改即可:

  1. 获取匹配关键词
    从你提供的标题代码中,先拿到当前页面的目标标题,作为匹配的核心关键词:
// 获取当前页面的目标标题
$target_title = isset($final_result[0]) ? $final_result[0]['title'] : '';
// 去除首尾空格,得到可用的搜索关键词
$search_keyword = trim($target_title);
  1. 修改SQL查询(用PDO预处理防注入)
    原代码直接拼接SQL存在安全风险,必须改用PDO预处理语句,同时添加模糊匹配条件:
$fresh_song = [];
if (!empty($search_keyword)) {
    // 匹配tag字段中包含关键词的记录,%表示前后可匹配任意字符
    $stmt = $database->prepare('SELECT tag FROM search WHERE tag LIKE :keyword ORDER BY id DESC LIMIT :limit');
    $stmt->bindValue(':keyword', "%{$search_keyword}%", PDO::PARAM_STR);
    $stmt->bindValue(':limit', $freshsong, PDO::PARAM_INT);
    $stmt->execute();
    $fresh_song = $stmt->fetchAll(PDO::FETCH_ASSOC);
} else {
    // 如果没拿到有效关键词, fallback到原逻辑展示最新主题
    $fresh_song = $database->query('SELECT tag FROM search ORDER BY id DESC LIMIT ' . $freshsong)->fetchAll(PDO::FETCH_ASSOC);
}
  1. 保留原有展示逻辑
    循环输出的部分不需要修改,因为只是数据源变成了匹配关键词的结果,展示逻辑完全一致:
foreach ($fresh_song as $fsong) {
    $fsong = ucwords($fsong['tag']);
    ?>
    <a href="<?php echo mp3_url($fsong); ?>" title="<?php echo toAscii($fsong); ?> mp3" class="list-group-item"><?php echo toAscii($fsong); ?></a>
    <?php
}
  1. 可选:精准匹配单个关键词
    如果不想用完整标题匹配,想拆成单个关键词进行多条件匹配,可以用以下代码:
$keywords = explode(' ', $search_keyword);
$conditions = [];
// 过滤空关键词
foreach ($keywords as $key) {
    $trimmed_key = trim($key);
    if (!empty($trimmed_key)) {
        $conditions[] = "tag LIKE ?";
    }
}

$fresh_song = [];
if (!empty($conditions)) {
    $sql = 'SELECT tag FROM search WHERE ' . implode(' OR ', $conditions) . ' ORDER BY id DESC LIMIT ?';
    $stmt = $database->prepare($sql);
    
    // 绑定每个关键词参数
    $param_pos = 1;
    foreach ($keywords as $key) {
        $trimmed_key = trim($key);
        if (!empty($trimmed_key)) {
            $stmt->bindValue($param_pos++, "%{$trimmed_key}%", PDO::PARAM_STR);
        }
    }
    $stmt->bindValue($param_pos, $freshsong, PDO::PARAM_INT);
    $stmt->execute();
    $fresh_song = $stmt->fetchAll(PDO::FETCH_ASSOC);
} else {
    // 无有效关键词时展示最新主题
    $fresh_song = $database->query('SELECT tag FROM search ORDER BY id DESC LIMIT ' . $freshsong)->fetchAll(PDO::FETCH_ASSOC);
}

内容的提问来源于stack exchange,提问作者Mixat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 05:13:13