我想允许我的用户使用任何顺序的部分单词在数据库中搜索值,以便搜索到的字符串:
nan mu
将以任何顺序返回包含nan和mu的任何字符串.只有两位,使用array_filter()和this中的解决方案来创建字符串相当容易
%nan%mu%
%mu%nan%
这样mysql就会搜索那些.现在我有一个问题,当有两个以上的位,例如nan mu te.目的是获得这些字符串:
$string1 = %nan%mu%te%
$string2 = %nan%te%mu%
$string3 = %mu%nan%te%
$string4 = %mu%te%nan%
$string5 = %te%nan%mu%
$string6 = %te%mu%nan%
并使6个mysql LIKE条件WHERE字段LIKE $string1 AND字段LIKE $string2 …这样任何顺序的那三个位的任何可能性都将包含在结果中
对于那些即将抱怨sql注入的人,谢谢,但不,谢谢,我使用PDO和参数化查询.
我用string nan mu te的实际尝试:
class EstDefini
{private $STR;
function __construct($vSTR)
{$this->STR = $vSTR;}
function Verifier($vSTR)
{return !($vSTR == $this->STR);}}
$vString = 'nan mu te';
$aBits = explode(' ',$vString);
$vNb = count($aBits);
for ($i=0;$i
{$vAppend = implode('%',array_filter($aBits,array(new EstDefini($aBits[$i]),'Verifier')));
$aLiterals[$i] = '%' . $aBits[$i] . '%' . $vAppend;}
只返回3个字符串,因为我的初始计数只有三个(我的爆炸字符串有三位):(这是var_dump($aLiterals))
array(3) {
[0]=>
string(10) "%nan%mu%te"
[1]=>
string(10) "%mu%nan%te"
[2]=>
string(10) "%te%nan%mu"
}
我最初的想法是修改计数:
$vNb = $vNb * max($vNb-1,1);
并尝试将其他位移动以获得不同的LIKE友好字符串,但是由于我的初始$aBits数组仍然是3,所以这个类创建调用新的EstDefini($aBits [$i])将尝试访问未定义的位.
如何从空格分隔的单词创建LIKE友好字符串,目的是使用MySQL以任何顺序查找所有这些单词?