вернуть увеличенную строку php как фрагмент кода mysql - PullRequest
0 голосов
/ 12 декабря 2011

У меня есть переменная поиска 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;
}

?> 

Ответы [ 2 ]

0 голосов
/ 12 декабря 2011
$sqlsnippet = "cats_sub.cats_sub_ms_desc LIKE %$splitted[$i]%";

Переопределяет $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);
0 голосов
/ 12 декабря 2011

Мой код:

<?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;

?> 
...