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

How to search in mysql for a word that contains in a PHP variable?

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

$customer =  $row["customer_name"];

这将包含即:test Microsoft test test test

现在,在我的数据库中有 customer 列并且该列包含 Microsoft Netherlands Office

要查看数据库,我喜欢下面的内容,但没有给我任何结果:

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

我想在数据库 table 中搜索包含来自 $customer.

的任何单词

您可以执行此操作的一种方法是将 $customer 变量拆分为一组搜索词,这样您就可以在 table.

中单独搜索每个词
$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() function, breaking your variable at every space character (After using trim() to remove beginning and ending spaces to avoid searches like '%%'). This gives us an array of values, which we then run through the foreach() 循环,构建 $queryString 以匹配所需的 SQL 语法。

警告:此解决方案可能容易受到SQL注入的攻击,这可以通过转义$c 循环内的变量。

您可以使用 fulltext searchMATCH AGAINST

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

要使全文正常工作,您必须在 customer 列上创建 FULLTEXT INDEX

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

注意:消毒 $customer 以避免 sql 注入

在 PHP 和 运行 中构建替代匹配的正则表达式 SQL:

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

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