如何在mysql中搜索php变量中包含的单词?

pwuypxnk  于 2021-06-25  发布在  Mysql
关注(0)|答案(3)|浏览(420)

我有多个包含客户名称的变量,如下所示:

$customer =  $row["customer_name"];

其中包括: test Microsoft test test test 现在,在我的数据库中 customer 列包含 Microsoft Netherlands Office 要查看数据库,我有如下所示,但它没有给我任何结果:

$query="SELECT * FROM specific_req WHERE customer LIKE '%$customer%'";

我要在包含来自的任何单词的数据库表中进行搜索 $customer .

ctehm74n

ctehm74n1#

你可以使用全文搜索。 MATCH AGAINST .

$query="SELECT * FROM specific_req WHERE MATCH(customer) AGAINST ('$customer')";

要使全文有效,您必须创建 FULLTEXT INDEXcustomer 列。

ALTER TABLE specific_req ADD FULLTEXT KEY `idx_customer` (`customer`)

注:消毒 $customer 避免sql注入

ttisahbt

ttisahbt2#

你可以这样做的一个方法是分开你的 $customer 变量转换为搜索项数组,这允许您在表中分别搜索每个项。

$customer = "test Microsoft test test test";
$customers = explode(" ", trim($customer));

$queryString = "";
$customers = array_unique($customers);
foreach($customers as $c) {
    $queryString .= "`customer` LIKE '%{$c}%' OR ";
}
$queryString = rtrim($queryString, " OR ");

$query = "SELECT * FROM specific_req WHERE {$queryString}";

echo $query;

这将使 $query 输出

SELECT * FROM specific_req WHERE `customer` LIKE '%test%' OR `customer` LIKE '%Microsoft%'

我们所做的就是使用php explode() 函数,在每个空格字符处打断变量(使用 trim() 删除开头和结尾空格以避免像 '%%' ). 这将为我们提供一个值数组,然后通过 foreach() 环路,建筑物 $queryString 以匹配所需的sql语法。
警告:此解决方案可能易受sql注入攻击,可以通过转义 $c 循环中的变量。

gudnpqoy

gudnpqoy3#

在php中构建可选匹配项的正则表达式并在sql中运行:

$customer = "(" . implode('|', array_unique(explode(' ', $customer))) . ")";

$sql = "SELECT * FROM specific_req WHERE customer REGEXP '{$customer}'";

相关问题