Помощник
|
Как в WHERE засунуть значение переменной? |
dfcan
|
Сообщение
#1
|
||
|
|
||
|
|||
Anonym |
24.12.2012, 19:18;
Ответить: Anonym
Сообщение
#2
|
|
SELECT*FROM toys where rubik='$r'
|
|
|
dfcan
|
Сообщение
#3
|
|
Anonym, нужно именно SELECT * FROM toys Where rubrik IN('Кубики', 'Машинки') LIMIT 0, 15 потому что $r имеет несколько значений
|
|
|
Anonym |
24.12.2012, 20:53;
Ответить: Anonym
Сообщение
#4
|
|
SELECT * FROM toys Where rubrik='$r' IN('Кубики', 'Машинки') LIMIT 0, 15
|
|
|
xdrew |
25.12.2012, 0:28;
Ответить: xdrew
Сообщение
#5
|
|
Чем не устраивает самый первый вариант?
[PHP]$query = "SELECT * FROM toys Where rubrik IN($r) LIMIT 0, 15"[/PHP] Если в $r массив, что обычно и бывает, можно сделать так: [PHP]$query = "SELECT * FROM toys Where rubrik IN(" . implode(',', $r) . ") LIMIT 0, 15"[/PHP] |
|
|
NoDrum |
25.12.2012, 2:42;
Ответить: NoDrum
Сообщение
#6
|
|
|
|
|
Arks |
25.12.2012, 22:53;
Ответить: Arks
Сообщение
#7
|
|
$query = "SELECT * FROM toys Where rubrik IN(" . implode(',', $r) . ") LIMIT 0, 15" Если уж по-хорошему, перед этим необходимо писать [PHP] foreach($r as $k => $v) { if(intval($v) === FALSE) { unset($r[$k]); } } [/PHP] Или прочие вариации с array_filter/array_map/array_walk. Почему-то все про это обычно забывают. И уж точно не дай Бог выбирать значения по текстовому диапазону не являющимся допустимым значением типа enum/set - SQL Injection гарантирован. |
|
|
dfcan
|
Сообщение
#8
|
|
Arks,
И уж точно не дай Бог выбирать значения по текстовому диапазону не являющимся допустимым значением типа enum/set - SQL Injection гарантирован. Можно подробнее? Немного не понял. Про инъекцию слышал, не понял про все остальное. Нельзя передавать текстовое значение что ли? |
|
|
Arks |
26.12.2012, 1:00;
Ответить: Arks
Сообщение
#9
|
|
Допустим есть поле enum `enumFieldValues ` в котором допустимыми являются значения "val1", "val2" и "val3".
Вы с чистой совестью ожидаете увидеть такой запрос: SELECT * FROM tbl WHERE enumFieldValues IN ('val1', 'val2'); И Вы даже поставили кавычки при implode, т.е. написали [PHP]"'".implode("','",$r)."'";[/PHP] А вместо этого смело получаете вот такой: SELECT * FROM tbl WHERE enumFieldValues IN ('val1', ''); UPDATE restrictedtable SET restrictedtable.adminpassword= "hackingAtempt"; SELECT '1'='1'; Чтобы не получать вот такой запрос Вы должны заранее знать, какие значения могут быть в данном поле типа enum и обязательно проверять что там не пытается в запросе вылезти какое-нибудь "'); UPDATE restrictedtable SET restrictedtable.restrictedField = \"hackingAtempt\"; SELECT '1'='1" Всякие addslashes и прочая хня типа mysql_real_escape_string конечно вариант, но они не являются 100% гарантией. При желании можно вообще долго извращаться над бедным автором кода, и таки уязвимость найдется. Не в кавычках так в чем-то другом, что называется было бы желание. Ну а я писал просто про то что многие даже их почему-то тупо забывают вставить. Так что по-сути единственным правильным 100% гарантии вариантом является только выборка по условию IN(<int>, <int>, ...) с предварительным intval'ом всех значений, и все равно обязательными кавычками в implode даже несмотря что поля int mysql сможет захавать и без кавычек. Вот в intval уже точно ничего кроме цифирок не влезет. По крайней мере я на это искренне надеюсь :goodpost: |
|
|
VasyOk |
26.12.2012, 10:10;
Ответить: VasyOk
Сообщение
#10
|
|
что бы не загоняться такими вопросами начните вот от сюда.
|
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Как в пушсетках покупают по 100-200 тысяч кликов за день? | 2 | Boymaster | 707 | Вчера, 17:52 автор: Boymaster |
|
Как вы отдыхаете от работы за компом | 151 | adw-kupon.ru | 19884 | 23.4.2024, 13:52 автор: Vmir |
|
Как вы бросили работу и перешли на заработок с сайтов? | 20 | uahomka | 3481 | 23.4.2024, 11:54 автор: Skyworker |
|
Как вывести деньги в Украине с заблокированного Юмани ? | 30 | freeax | 5045 | 20.4.2024, 16:49 автор: Liudmila |
|
Арбитражники, как ведете учет расходов и доходов? | 13 | Boymaster | 2039 | 20.4.2024, 15:06 автор: Boymaster |
Текстовая версия | Сейчас: 25.4.2024, 21:18 |