【发布时间】:2026-01-18 02:40:01
【问题描述】:
我对 PHP 和 MySQL 都很陌生,我正在尝试构建一个小型歌手名言库。我希望用户能够通过键入引语本身的一部分、歌手的姓名或歌手的乐队(如果有)来搜索引语。
现在,那部分我已经很确定了:
$query = 'SELECT * FROM quotes WHERE (quote LIKE "%'.$search_string.'%" OR singerName LIKE "%'.$search_string.'%" OR bandName LIKE "%'.$search_string.'%")';
这可行,尽管它会返回 search_string 位于单词中间的结果:如果我输入“her”,它将返回包含“other”或“together”的每个引号。如果我从查询中删除第二个 %,它不会返回 search_string 不是第一个单词的引号,我希望它这样做。
无论如何,我还想做的是提供过滤结果的可能性。假设我希望用户能够通过单选按钮仅显示英语、德语或两者的引号。默认情况下,Both 被选中,所以上面的 $query 仍然有效。但是,如果用户选择英文,它也应该说类似AND (language = 'EN')。
目前,我尝试以这种方式添加到查询中:
if ($_POST['language']== "EN") {
$sql .= " AND (language = 'EN')";
}
它有效,但它可能是一个真正的麻烦,因为我还希望用户只使用过滤器搜索报价,而不输入搜索查询:他们将能够查找乐队中歌手的英文报价,例如。所以,我也有这个:
if (strlen($search_string) < 1) {
$sql = "SELECT * FROM quotes";
}
但是,$sql .= " AND (language = 'EN')"; 将不再正确,因为“AND”应该是“WHERE”。所以我必须有另一个 if 子句来修改字符串,并为我决定应用的每个过滤器设置另一个。
然后我的问题是:我应该如何构建我的查询,因为有 可选 过滤器,并且搜索也应该可以使用过滤器单独?
谢谢!
【问题讨论】:
标签: php mysql sql regex filter