Почему мой поиск не уточнит? - PullRequest
0 голосов
/ 29 мая 2009

У меня есть этот бит кода:

//Restrict the SQL query with an AND clause if a member has been selected
if ($form_member_id != 0) {
    $query .= "AND photos.member_id = '$form_member_id' ";
}

Это предназначено для уточнения поискового запроса до только выбранного пользователя, поэтому весь запрос в совокупности гласит:

SELECT
photos.photo_id, members.member_name, photos.photo_title, photos.photo_film, photos.photo_height, photos.photo_width
FROM members, photos
WHERE members.member_id = photos.member_id
    AND photos.member_id = '$form_member_id'

По какой-то причине это не работает, я проверил запрос, и он отлично работает, но по какой-то причине он не будет работать с написанным кодом. Я проверил разницу в именах переменных, но они все одинаковые .... кто-нибудь знает, почему он не работает !!!

Ответы [ 5 ]

3 голосов
/ 29 мая 2009

Я думаю, что вам нужен пробел перед вашим И в противном случае это будет:

WHERE members.member_id = photos.member_idAND photos.member_id = '$form_member_id'

вместо

WHERE members.member_id = photos.member_id AND photos.member_id = '$form_member_id'

То же самое , что @Matthew говорит об использовании параметризованных запросов, но я все еще думаю, что вышеупомянутое - проблема.

0 голосов
/ 29 мая 2009

Вы должны повторить запрос, если он сейчас работает, чтобы увидеть, в чем проблема:)

0 голосов
/ 29 мая 2009

отладка скрипта с использованием

if ($form_member_id != 0) {
        $query .= "AND photos.member_id = '$form_member_id' ";
        die($query);
}

скопируйте и вставьте запрос и запустите его в phymyadmin или т. Д., Чтобы выяснить источник ошибки

для большей безопасности, вы можете захотеть, чтобы это было так

if ($form_member_id != 0) {
        $query .= "AND photos.member_id = '" . mysql_real_escape_string($form_member_id) . "' ";
}
0 голосов
/ 29 мая 2009

Еще одна вещь, и у меня нет опыта работы с php, но ваш код выглядит главной целью для атак SQL-инъекций ...

Кто-то может заполнить буфер для вашего "$form_member_id" и ввести значение типа

'; truncate members; '

где начальная и конечная кавычка являются частью представленной строки ... первая '; прервет вашу строку,; завершить оператор, а затем обрезать вашу таблицу и игнорировать остальные ...

Опять же, я не PHP-человек, но многие другие исторические сообщения о безопасности говорят о ПАРАМЕТРИРОВАНИИ ваших запросов для предотвращения таких инъекционных атак.

0 голосов
/ 29 мая 2009

Очевидный шаг - распечатать полный запрос перед его выполнением, затем запустить его вручную и посмотреть, что произойдет. Кроме того, вы должны использовать подготовленные заявления .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...