Результаты подкачки: обработка неверных переданных данных - PullRequest
1 голос
/ 09 июня 2011

Иметь простую страницу, которая извлекает результаты из MySQL и отображает их в виде таблицы. Я включил постраничный просмотр результатов и позволил пользователю устанавливать количество результатов, отображаемых на странице. Я передаю два значения строки запроса для обработки этого: «страница» и «количество».

Затем я беру эти значения, чтобы вычислить LIMIT в моем MySQL-запросе, используя директиву SQL_CALC_FOUND_ROWS, а затем вызывая SELECT FOUND_ROWS();, чтобы получить общее количество результатов. Все это прекрасно работает.

Теперь я хочу проверить значения строки запроса. Поскольку я сохраняю возможные «правильные» значения для результата / значения страницы «count» в массиве, я просто проверяю, что переданное значение «count» находится в этом массиве, и если не установлено его значение по умолчанию. Что касается значения «страница», у меня есть небольшой ментальный блок ... чтобы определить, есть ли какие-либо результаты для пропущенной «страницы», то есть она «правильная», мне нужно перейти в базу данных и сначала найдите счетчик результатов, но так как я хочу перейти к БД только один раз, мне нужно включить LIMIT, которые основаны на переданном значении «page» ... курица и яйцо. У меня есть пара мыслей о том, как решить эту проблему:

  1. Запустите запрос, как указано выше, и, если результат (('page' - 1) * 'count') больше, чем значение, возвращаемое SELECT FOUND_ROWS();, повторите запрос с новым набором LIMIT. до 0, счит.

  2. Получите полный набор результатов, убедитесь, что переданная страница верна, затем выполните еще одно извлечение из базы данных со значениями LIMIT.

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

Спасибо

Пол

1 Ответ

0 голосов
/ 18 сентября 2011

Я закончил с использованием первого решения выше -

  1. Запустите запрос, как указано выше, и, если результат (('page' - 1) * 'count') больше, чем значение, возвращаемое SELECT FOUND_ROWS () ;, повторите запрос, установив для нового LIMIT значение, равное 0, кол.

Это не идеально, поскольку повторное извлечение базы данных требуется для случаев, когда передаваемое значение страницы неверно, но, учитывая, что это неожиданный случай, вызванный только преднамеренной передачей неверных данных со стороны пользователя, это приемлемо. Если у кого-то есть лучшее решение, я буду рад вновь открыть вопрос.

...