[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Sql запрос
denash
У меня есть четыре переменные $country,$city,$site,$bonus.
Каждая из этих переменных может содержать любо значение "все", либо какоето определённое значение. Нам нужно выводить из базы акции в соответствии с этими переменными.
Вот пример sql запроса
"SELECT*FROM `my_table` WHERE `country`='$country' and `city`='$city' and `site`='$site' and `bonus`='$bonus'".

Проблемы в том, что если переменная содержит значение "все", то данный запрос выполнен не будет (т.к. mysql будет искать это значение).
Выход такой (например $city содержит значение "все")
if ($city=="all") {
$sql="SELECT*FROM `my_table` WHERE `country`='$country' ' and `site`='$site' and `bonus`='$bonus'"; // мы выкинули из запроса city
}
elseif ($city!="all")
{
$sql="SELECT*FROM `my_table` WHERE `country`='$country' and `city`='$city' and `site`='$site' and `bonus`='$bonus'
}

Вот так мы можем решить данную задачу, но представьте у нас есть четыре переменные и чтобы всё сделать корректно, нужно перебрать аж 4! вероятностей (например city и bonus это все и т.д.)
Сужествует ли какой нибудь способ решения данной задачи, или какой нибудь алгоритм.



Спустя 12 минут, 16 секунд (6.05.2011 - 21:55) Nikitian написал(а):

$arr = array(
'country'=>$country,
'city'=>$city,
'site'=>$site,
'bonus'=>$bonus
);
$sql = array();
foreach($arr as $field=>$value){
if($value!='all'){
$sql[]='`'.$field.'`="'.mysql_escape_string($value).'"';
}
}

if(sizeof($sql)==0)$sql[]='1';
$sql = 'SELECT*FROM `my_table` WHERE '.implode(' and ',$sql);

Спустя 3 минуты, 16 секунд (6.05.2011 - 21:58) alex12060 написал(а):

SELECT *
FROM `my_table`
WHERE `country`
LIKE %$country%;

Спустя 6 минут, 18 секунд (6.05.2011 - 22:05) denash написал(а):
Цитата (Nikitian @ 6.05.2011 - 18:55)

$arr = array(
'country'=>$country,
'city'=>$city,
'site'=>$site,
'bonus'=>$bonus
);
$sql = array();
foreach($arr as $field=>$value){
if($value!='all'){
$sql[]='`'.$field.'`="'.mysql_escape_string($value).'"';
}
}

if(sizeof($sql)==0)$sql[]='1';
$sql = 'SELECT*FROM `my_table` WHERE '.implode(' and ',$sql);

Огромное спасибо вам. И можно ещё один вопрос задать. Для защиты что лучше использовать mysql_escape_string или addslashes ?

Спустя 2 минуты, 40 секунд (6.05.2011 - 22:07) denash написал(а):
Цитата (alex12060 @ 6.05.2011 - 18:58)

SELECT *
FROM `my_table`
WHERE `country`
LIKE %$country%;

Это вообще не то, LIKE будет искать значения в которых присутствует подстрока $country. Здесь речь идёт совсем не об этом

Спустя 11 минут, 18 секунд (6.05.2011 - 22:19) Nikitian написал(а):
denash
mysql_escape_string() или mysql_real_escape_string() для экранирования спецсимволов именно в sql-запросах придуманы. addslashes() только для экранирования кавычек, бэкслеша и nul.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.