php - 分割多字 $_POST 输入

标签 php mysql sql

我正在尝试使用一个 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)

有没有办法实现这一目标,或者可能有更聪明的方法来实现这一目标?

最佳答案

您必须搜索输入的每个组合,以查看其中一个是否与名字或姓氏匹配。还要记住 firstlast 是 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/

相关文章:

php - 如何连接这 3 个表并使我的 Select 查询起作用?

PHP - IP 地址回显为 127.0.0.1

PHP:检查一个数组是否包含来自另一个数组的所有数组值

MySQL 获取不返回值

php - 列出数据库中的详细信息

mysql - Yii 在其他模型中调用 beforeSave() 来保存

sql - 如何在 Postgres 中创建一个包含所有默认值的新行?

php - Datepicker dd/mm/yy php 和 mysql 错误

c# - SQL 插入查询,整天都在工作,但现在每次都失败

mysql - 正好对四行 sql 进行分组