- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
function get_avatar($id){
$mysqli = connectDB();
$avatar_get = $mysqli->query("SELECT `avatar` FROM `users` WHERE `id`='$id'");
$line = $result_set->fetch_assoc();
closeDB($mysqli);
return $line["avatar"];
}
Vasiliy 17.03.2014 22:46 # +4
bormand 17.03.2014 22:59 # +3
P.S. А коннект на каждый запрос - это няшно. Я такого чуда еще ни разу не видел ;)
inkanus-gray 18.03.2014 00:29 # +4
Lowezar 18.03.2014 00:43 # +3
Lowezar 18.03.2014 14:21 # +6
inkanus-gray 18.03.2014 00:27 # +4
2. Кто такой $result_set? Кто его породил?
guest 18.03.2014 11:40 # +2
myaut 18.03.2014 12:33 # 0
bormand 18.03.2014 12:33 # +4
myaut 18.03.2014 13:10 # +2
gost 18.03.2014 15:03 # 0
eandr67 18.03.2014 16:16 # +2
inkanus-gray 18.03.2014 18:29 # +1
Проверить корректность запроса — не проблема, всего-то ввести его в консоль СУБД руками и посмотреть, что он возвращает.
На ошибку здесь явно указал guest: объект запроса сохраняется в переменной $avatar_get, а метод для выполнения запроса дёргается у переменной $result_set, которая наверняка ещё не инициализирована.
Кстати, новички в пхп часто спотыкаются на том, что запрос выполняется не в одну строку.
Но самое интересное, откуда приходит значение $id. Если оно выше по коду приходит из параметров запроса ($_GET, $_POST) и не фильтруется, то будет очень плохо...
Vasiliy 18.03.2014 18:49 # +1
defecate-plusplus 18.03.2014 18:54 # +1
в качестве $id что, нельзя передать "Роберт'); DROP TABLE Students;--"?
inkanus-gray 18.03.2014 19:03 # +1
Нельзя. mysqli::query() исполняет только один запрос. См. ниже идею багфикса.
defecate-plusplus 18.03.2014 19:08 # 0
inkanus-gray 18.03.2014 19:16 # +5
Vasiliy 18.03.2014 20:28 # +1
eth0 18.03.2014 21:02 # 0
Что удивительно, даже школьные поделки перешли на mysqli, а вот подготовленных выражений как не было, так и нет.
Vasiliy 19.03.2014 08:55 # +1
select * from $table where id=$id; где $table и $id брались из урла. Урлы были вида /pages/192 pages это таблица 192 id.
$table обрабатывалось mysql_real_escape_string и автор был уверен что инъекция не пройдет.
guest 19.03.2014 19:22 # +1
bormand 19.03.2014 20:07 # +1
Набирали себе сотрудников?
inkanus-gray 19.03.2014 15:59 # 0
defecate-plusplus 19.03.2014 16:07 # 0
inkanus-gray 19.03.2014 16:16 # 0
defecate-plusplus 19.03.2014 16:23 # 0
ты можешь только забиндить значения к параметрам, которые уйдут в СУБД как отдельные значения
или я не понял, о каком примере ты говоришь
bormand 19.03.2014 18:58 # +1
А если сайт отдает левым юзерам записи, которые он им не должен бы отдавать - это уже у автора опилки в голове. От этой уязвимости СУБД и ее интерфейсы не застрахуют, разве что завести по юзеру в базе на каждого юзера на сайте...
bormand 19.03.2014 19:04 # 0
... и сделать каждому из них свои вьюхи.
Ну либо особый ORM, умеющий в права на записи. Есть такие?
В любом случае, больно уж жутко получается ради подстраховки пыхомакаки от фейла...
guest 19.03.2014 21:26 # 0
eth0 19.03.2014 18:35 # +2
Дай дураку половой орган стеклянный, он осколками и порежется.
inkanus-gray 18.03.2014 18:59 # +1
Lowezar 19.03.2014 12:56 # +2
Это почему же? Несколько колонок можно слепить через CONCAT. Судя по коду тут будет выводиться всего одна строка - можно слепить табличку через GROUP_CONCAT.
Vasiliy 19.03.2014 13:27 # 0
Можно эх печалька
bormand 19.03.2014 14:03 # +3
Можно. А на самом деле даже нужно.