0

我有一个搜索 get 变量,它可以包含多个以空格分隔的单词。我使用以下脚本来获取 url 变量。请注意,为了简单起见,我刚刚使用了一个字符串。

我试图做的是爆炸变量值,然后在之前和之后添加所需的 sql。

回声工作正常。在后面的代码中,我需要这个回声作为 sql 中的变量。

我的问题是,当我在查询外部作为字符串引用它时,它只返回最后一个查询金属。我对此很陌生,请提供任何帮助。

<?php

$string = "kitchens wooden metal";
$splitted = explode(" ",$string);
$cnt = count($splitted);
$i=0;
while($cnt > $i)
{
    $sqlsnippet = "cats_sub.cats_sub_ms_desc LIKE %$splitted[$i]%";
    $i++;

    echo $sqlsnippet;
}

?> 
4

2 回答 2

0

我的代码:

<?php

$string = "kitchens wooden metal";
$splitted = explode(" ",$string);
$cnt = count($splitted);
$i=0;
while($cnt > $i)
{
$sqlsnippets[] = "cats_sub.cats_sub_ms_desc LIKE '%$splitted[$i]%'";
$i++;

}
$sqlsnippet = "(" . implode(" or ", $sqlsnippets) . ")";

echo $sqlsnippet;
?> 

结果:

(cats_sub.cats_sub_ms_desc LIKE '%kitchens%' or cats_sub.cats_sub_ms_desc LIKE '%wooden%' or cats_sub.cats_sub_ms_desc LIKE '%metal%')

优化版:

<?php

$string = "kitchens wooden metal";
$sqlsnippet = "(cats_sub.cats_sub_ms_desc LIKE '%" . preg_replace("/ /", "%' or cats_sub.cats_sub_ms_desc LIKE '%", $string) . "%')";
echo $sqlsnippet;

?> 
于 2011-12-12T09:42:19.363 回答
0
$sqlsnippet = "cats_sub.cats_sub_ms_desc LIKE %$splitted[$i]%";

这会覆盖-loop$sqlsnippet的每次迭代。while这就是为什么您只获得最后一个 SQL 片段的原因。

您需要连接 SQL 片段,如下所示:

$sqlsnippet = 'WHERE ';

foreach($i = 0; $i < count($splitted); $i++)
{
    // Append AND 
    if($i > 0)
    {
        $sqlsnippet .= ' AND ';
    }

    $sqlsnippet .= 'cats_sub.cats_sub_ms_desc LIKE %' . mysql_real_escape($splitted[$i]) . '%';
}

var_dump($sqlsnippet);
于 2011-12-12T09:42:28.287 回答