Динамическая подстановка переменных в запрос (MySQL)

MisterBonus

Новичок
Динамическая подстановка переменных в запрос (MySQL)

Нужно сделать поиск зарегистрированных на сайте участников по определённым критериям (например фамилии, имени или городу проживания).

"select * from table where $name=$1 and $city=$2 and $lastname=$3", где $name, $city и $lastname - динамические переменные, подставляемые в запрос в том случае, если клиентом через форму они были переданы не пустыми

Пример: Требуется найти всех Андреев, которые живут в Москве.

В этом случае в запрос должны быть подставлены только $name и $city.

Заранее спасибо всем за помощь!
 

MisterBonus

Новичок
а можно конкретный пример? если ты имеешь ввиду что-то типа этого:
if ($1=='', $2!='',$3==''... и т.д.){}
if ($1!='', $2!='',$3==''... и т.д.){}
то пребирать все возможные варианты с большим количеством критерий поиска не очень удобно... (
неужели это единственный вариант?
 

Фанат

oncle terrible
Команда форума
MisterBonus
а зачем у тебя в каждом if куча условий? почему бы не проверять по одному?
 

MisterBonus

Новичок
В каждом if я хотел составлять отдельный запрос select, подходящий под выбранное условие (с разными комбинациями динамических переменных-критериев поиска), а как проверять в моём случае каждое отдельное условие я что-то не очень представляю... ведь в итоге должен получиться один запрос...

Покажите кто-нибудь пожалуйста пример!
 

Фанат

oncle terrible
Команда форума
а зачем определять целый запрос, когда ты сам пишешь - динамическая подстановка в селект?
вот и подставляй в селект только те условия, которые выбраны.

неужели так сложно подставить в запрос строчку "name='$name'"?
 

MisterBonus

Новичок
Вообще я не собирался пользоваться if-ом, я просто ждал предложений по поводу моей задачи... zerkms предложил if во втором посте, а я уже просто спросил у него что он имел ввиду своим коротким постом...

*****, подставить в запрос строчку "name='$name'" конечно легко, только вот эта строчка, как я писал в первом посте, должна подставляться только в том случае, если $name не пуста (т.е. если пользователь решит воспользоваться поиском по имени, введёт в форму какое-нибудь имя, и это имя ($name) будет передано в запрос), а если $name окажется пуста (пользователь не заполнит поле name в форме, т.к. захочет воспользоваться поиском по другому критерию, например только по фамилии...) - тогда в запрос её ($name) уже подставлять не надо... вот в чём проблема... Не знаю как мне сделать такой запрос...

Мне кажется никто так и не понял что я пытаюсь сделать... :(
 

Фанат

oncle terrible
Команда форума
олжна подставляться только в том случае, если $name не пуста
ты только что написал практически готовый кусок кода на пхп.
к чему было писать остальной текст - непонятно

к чему тут остальной текст - непонятно.
Мне кажется никто так и не понял что я пытаюсь сделать...
мне кажется, ты слишком высокого мнения о сложности и уникальности своей задачи.
 

MisterBonus

Новичок
:) Конечно нет! Ясно дело что это должно делаться как-то легко! Просто я PHP "изучаю" не так давно... поэтому возможно и "странные непонятки" присутствуют...

Может всё-таки напишешь пожалуйста сам нужный мне код... хоть ты и говоришь что я его уже сам написал... Буду благодарен!
 

Alexandre

PHPПенсионер
неужели так сложно подставить в запрос строчку "name='$name'"?
схематично так:
Код:
$p1=$p2=$p3=0;
if ($name != ''  ){    
    $subSql1 = "name='$name'";
    $and1 = ' AND  ';
    $p1=1;
}
if ( $city != '' )   { 
    $subSql2 = "city='$city'";
    $and2 = ' AND  ';
    $p2=1;
}

if ( $lastname != '' )   { 
    $subSql2 = "lastname='$lastname'";
        $p3=1;
}

if (  $p2 +$p3  ==0  )
  $end1='';

if (  $p1+$p2 ==2 && $p3==0  )
    $end2='';

if ( $p1+p2+p3 )
   $sql = "SELECT * FROM tablename WHERE  $subSql1 $and1 $subSql2 $and2 $subSql3   ";
else
  $sql = "Select * FROM tablename";
 

Фанат

oncle terrible
Команда форума
жесть

-~{}~ 27.06.09 00:25:

MisterBonus вот смотри, ты пишешь:
если $name не пуста, то строка "name='$name'" подставляется в запрос.
это же готовый код на пхп
Код:
if   ($name  !=  ""   )       $sql=$sql      .       "name='$name'"   
если  $name  не  пуста   то   в запрос подставляется "name='$name'"
что тут сложного-то?
 

zerkms

TDD infected
Команда форума
Alexandre
ты и вправду эту задачу решил бы вот так?????
говнокод ведь нереальный....
 

Lightning

Трудоголик
ИМХО, лучше использовать в таких случаях SQL-билдер, а не разбрасывать куски запроса по if-ам в коде.
 

Фанат

oncle terrible
Команда форума
MisterBonus
какой именно вариант не работает? и как ты пробовал? и как выглядит это "не работает"?
 

MisterBonus

Новичок
$search1 = mysql_query("select photo,f,i,o,city,reputation from s_participants where (city = $city or city = '') and (f = $f or f = '') and (i = $i or i = '') and (o = $o or o = '')");
$search1_row = mysql_fetch_array($search1);

...вот этот вариант не работает и вот этот...

$search1 = mysql_query("select photo,f,i,o,city,reputation from s_participants where (city = '$city' or city = '') and (f = '$f' or f = '') and (i = '$i' or i = '') and (o = '$o' or o = '')");
$search1_row = mysql_fetch_array($search1);

Очень дружелюбный народ на этом форуме! Заранее спасибо за помощь!
 

Wicked

Новичок
стоитло привести идею запроса, как тут же нашёлся тот, кто воспринял ее как готовый к употреблению запрос, да к тому же скопипастил с ошибками :)

(city = '$city' or '$city' = ''), остальное по аналогии.

+ http://phpfaq.ru/slashes
 
Сверху