Вы, наверное, уже знаете о том, что MySQL оснащен функциями, позволяющими выполнять условные операции. Эти функции дают возможность задавать условную логику внутри самого SQL-запроса, позволяя тем самым разработчикам перенести обработку логики на уровень базы данных. Эти функции перечислены в табл. 7.7.
Функции управления
Первая из этих функций - IFNULL() - принимает два аргумента и оценивает первый из них. Если первый аргумент не равен NULL, функция возвращает первый аргумент, а если равен NULL - функция возвращает второй аргумент.
Функции управления
Функция IF() позволяет произвести простейшую условную проверку, аналогичную той, что предусмотрена во многих языках написания сценариев. Эта функция принимает три аргумента, первый из которых является условным выражением, которое будет сравниваться; если оценка выражения дает значение "истина", функция IF() возвращает второй аргумент, если "ложь" - возвращает третий аргумент.
Функции управления
Применение функции IF() уместно только в случае двух возможных исходов. Однако в реальных ситуациях этого может оказаться недостаточно, т.к. часто в условных операторах приходится программировать три и более ветви. Для таких случаев у MySQL предусмотрена функция CASE, работающая аналогично условным конструкциям switch-case в языках программирования PHP и Perl.
Функции управления
Здесь первым аргументом является значение оцениваемого выражения, за которым следует последовательность блоков WHEN-THEN, в каждом из них задается значение, сравниваемое с первым аргументом, и возвращаемый результат в случае "истинности" операции сравнения. Последовательность блоков WHEN-THEN завершается блоком ELSE,




в котором задается результат, принимаемый в случае, если ни в одном из блоков WHEN-THEN не найдено соответствия. Затем следует ключевое слово END, завершающее собой всю конструкцию функции CASE. Если отсутствует блок ELSE и ни в одном из блоков WHEN-THEN не найдено соответствия, MySQL возвращает значение NULL.
Существует еще и альтернативный синтаксис функции CASE, который может очень пригодиться в определенных ситуациях. Вот как он выглядит:
CASE
WHEN (условное выражение 1) THEN (результат 1) WHEN (условное выражение 2) THEN (результат 2) ELSE (результат по умолчанию)
END
В этом случае результат зависит от того, возвращает ли соответствующая условная проверка значение "истина".
Это разъясняют следующие примеры.
Функции управления
Функции управления
Функции управления
Хранящиеся в этой таблице пароли пользователей закодированы с помощью функции ENCRYPT() и специального кода ts.
Итак, возможны два варианта выполнения аутентификации с помощью этой системы: использование бизнес-логики для кодирования и верификации на прикладном уровне или на уровне базы данных MySQL с помощью встроенной функции IF(). Так как эта книга посвящена MySQL, вполне логично, что мы выберем второй вариант.
Функции управления
В данном случае ввод пользователя шифруется функцией ENCRYPT() и обрабатывается функцией IF() , которая выполняет двуединую задачу - проверку пароля и передачу результата приложению. Таким образом нагрузка на приложение существенно уменьшается: вместо того, чтобы выполнять необходимые процедуры шифрования, передавать данные MySQL и проверять их на соответствие, достаточно передать текстовый пароль на MySQL-сервер (через аналогичный вышеупомянутому запрос SELECT), прочесть полученный результат и разрешить доступ или отказать в нем.