2011-12-12 35 views
0

我有一个搜索获取变量,可以包含空间分隔的多个单词。我已经使用以下脚本来抓取url变量。为了简单起见,我刚刚使用了一个字符串的示例。返回一个php递增的字符串作为mysql片段

我试图做的是爆炸变量值,然后添加所需的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; 
} 

?> 

回答

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; 

?> 
+0

你是真正的辉煌!非常感谢。它完美的作品。 – user1093405

0
$sqlsnippet = "cats_sub.cats_sub_ms_desc LIKE %$splitted[$i]%"; 

这将覆盖对于while -loop的每次迭代都使用。这就是为什么你只能得到最后一个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); 
相关问题