
在实际业务中,下拉选择框(
✅ 核心思路:多条件 LIKE 拼接 + 预处理语句
MySQL 中可使用多个 LIKE 子句实现“同时包含多个词”的语义(即逻辑与关系)。例如:
SELECT * FROM `contratos` WHERE id_contrato LIKE '%FRAMEWORK CONTRACT%' AND id_contrato LIKE '%2023%';
⚠️ 注意:此处假设待搜索字段为 id_contrato(即示例中显示的合同标题字段),而非 yourtext(原答案中的占位符需替换为真实字段名)。
? 推荐实践:使用 MySQLi 预处理防止SQL注入
避免字符串拼接导致的安全风险,应将关键词作为参数传入预处理语句:
立即学习“前端免费学习笔记(深入)”;
';
echo '';
while ($row = mysqli_fetch_assoc($result)) {
// 注意:确保 $tipo_nombre 已正确定义(如从关联表获取)
$displayText = "{$row['id_contrato']} - {$tipo_nombre} {$row['no_ctto']}/{$row['anno']}";
echo "";
}
echo '';
mysqli_stmt_close($stmt);
} else {
error_log("SQL prepare failed: " . mysqli_error($conexion));
}
?>⚠️ 关键注意事项
- 字段准确性:务必确认 id_contrato 是存储完整标题(如 "FRAMEWORK CONTRACT TO CONTRACT 19/ 2023")的字段;若标题分散在多字段中,需用 CONCAT() 合并后再匹配。
- 大小写与空格鲁棒性:MySQL LIKE 默认不区分大小写(取决于排序规则),但建议前端清洗关键词(如 trim(strtoupper($kw)))并统一后端匹配逻辑。
- 性能优化:对高频搜索字段(如 id_contrato)建立全文索引(FULLTEXT)或前缀索引(如 INDEX idx_title (id_contrato(100))),避免全表扫描。
- 用户体验增强:可配合AJAX实现无刷新筛选,或在页面加载时默认显示全部,再由用户触发搜索。
通过以上方式,你既能安全、灵活地实现多关键词服务端过滤,又能保持代码可维护性与扩展性——未来只需修改 $keywords 数组或提取为独立函数,即可复用于其他筛选场景。











