我正在尝试使用一个 PHP 表单来接受文本输入,然后查询底层的 MySQL 表。
<form method="GET" action="search.php" name ="SearchBar">
<input type="text" name"search">
<input type="submit" value="Search">
</form>
我正在查询的表的模式是
电影(id, title, year, rating, company)
Actor(id, last, first, sex, dob, dod)
对于 Movie,我认为这很容易,因为我只需使用 WHERE title LIKE '%".$_POST['search']."%'
沿该行进行查询。但是对于 Actor,由于名称分为两部分(last,first),我认为我需要按单词分解我的输入,以便我可以将每个单词与属性进行比较。 (这样,如果输入是“Hanks Tom”或“Tom Hanks”,我的查询将能够从任一输入中找到 Actor Tom Hanks)
有没有办法实现这一目标,或者可能有更聪明的方法来实现这一目标?
最佳答案
您必须搜索输入的每个组合,以查看其中一个是否与名字或姓氏匹配。还要记住 first
和 last
是 MySQL 的保留字。您可以使用如下内容。
$input = 'Tommy Lee Jones';
$names = explode(' ', preg_replace('/(\s)+/', ' ', $input););
$temp = array();
foreach($names as $key) {
$temp[] = "`first` LIKE '%$key%'";
$temp[] = "`last` LIKE '%$key%'";
}
$s = ' AND ( '.implode(' OR ', $temp).' )';
echo $s;
结果:
AND ( `first` LIKE '%Tommy%' OR `last` LIKE '%Tommy%' OR `first` LIKE '%Lee%'
OR `last` LIKE '%Lee%' OR `first` LIKE '%Jones%' OR `last` LIKE '%Jones%' )
关于php - 分割多字 $_POST 输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33445278/