Каждая из этих переменных может содержать любо значение "все", либо какоето определённое значение. Нам нужно выводить из базы акции в соответствии с этими переменными.
Вот пример 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) |
|
Огромное спасибо вам. И можно ещё один вопрос задать. Для защиты что лучше использовать mysql_escape_string или addslashes ?
Спустя 2 минуты, 40 секунд (6.05.2011 - 22:07) denash написал(а):
Цитата (alex12060 @ 6.05.2011 - 18:58) |
|
Это вообще не то, LIKE будет искать значения в которых присутствует подстрока $country. Здесь речь идёт совсем не об этом
Спустя 11 минут, 18 секунд (6.05.2011 - 22:19) Nikitian написал(а):
denash
mysql_escape_string() или mysql_real_escape_string() для экранирования спецсимволов именно в sql-запросах придуманы. addslashes() только для экранирования кавычек, бэкслеша и nul.
mysql_escape_string() или mysql_real_escape_string() для экранирования спецсимволов именно в sql-запросах придуманы. addslashes() только для экранирования кавычек, бэкслеша и nul.