MySQL ... ценовой диапазон в пределах ценового диапазона?

StackOverflow https://stackoverflow.com/questions/7336921

  •  27-10-2019
  •  | 
  •  

Вопрос

Я разрабатываю сценарий недвижимости. Сценарий имеет опцию поиска, где пользователь может указать диапазон цен, например. user_price_low to user_price_high и списки должны быть извлечены из базы данных, которая имеет например. db_price_high и db_price_low.

Я использовал оператор между попыткой найти совпадения,

WHERE price_low BETWEEN '.$_REQUEST['minprice_buy'].' AND '.$_REQUEST['maxprice_buy']

Но, к моему удивлению ...

Если пользователь имеет user_price_high = 60 и user_price_low = 20, а запись имеет db_price_low = 30 и db_price_high = 120

Мой запрос недействителен в этом случае.

Я пытался посмотреть на Mysql Query-Date Lange в диапазоне дат Но соответствует ли это тому, что я хочу?

Это было полезно?

Решение

Чандан, никогда не вводим $ _* функционирует непосредственно в запрос. Это отверстие для инъекции SQL.

Измените код на:

$min_price = mysql_real_escape_string($_REQUEST['minprice_buy']);
$max_price = mysql_real_escape_string($_REQUEST['maxprice_buy']);
$query = "SELECT whatever 
          FROM whichever 
          WHERE price_low BETWEEN '$min_price' AND '$max_price' ";
// Dont forget these quotes       ^          ^     ^          ^
// Or mysql_real_escape_string() will not work!.

Что касается вашего вопроса, измените запрос на что -то вроде:

WHERE '$min_price' BETWEEN price_low AND price_high 
  AND '$max_price' BETWEEN price_low AND price_high

Вы также можете рассмотреть:

WHERE ('$min_price' BETWEEN price_low AND price_high) 
  OR  ('$max_price' BETWEEN price_low AND price_high)

Здесь min_price а также max_price Не нужно всегда быть в диапазоне.

Видеть: Как работает инъекция SQL из комиксов «Бобби» XKCD?

Другие советы

Если вы хотите проверить, есть ли у диапазонов какие -либо общие моменты, которые вы должны использовать

WHERE greatest(price_low,user_price_low)<=least(price_high,user_price_high)

Если вы хотите проверить, находится ли пользовательский диапазон во всех диапазоне, вы можете использовать
Неопределенное поведение для user_preice_low>user_price_high

WHERE user_price_low>=price_low && user_price_high<=price_high

Так что, как я понимаю, не должно быть

WHERE price_low >= '.$_REQUEST['minprice_buy'].' AND price_high <='.$_REQUEST['maxprice_buy']'

Проверить свой ввод, используя mysql_real_escape_string(); Прежде чем использовать их в запросе, не используйте $ _get, $ _request, $ _post переменные непосредственно в любом запросе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top