Створення збереженої процедури в MySQL
Оскільки ХП зберігаються на сервері, то і створювати їх рекомендується безпосередньо на сервері, тобто не слід використовувати PHP або інші мови програмування для виконання SQL-команд по створенню збережених процедур.
Давайте розглянемо, як створити ХП на сервері MySQL, як створити користувача для неї і як призначити йому привілеї на запуск нашої ХП. Потім перевіримо коректність результату. Для цього я скористаюся MySQL Workbench. Можна використовувати і інші програми (наприклад, PHPMyAdmin). Ви можете вибрати той інструментарій, який вам більше підходить.
Припустимо, наша таблиця виглядає так:
Для нашого службовця, якому потрібна статистична інформація по зарплатах (середня, максимальна, мінімальна і т.п.) з цієї таблиці, ми створимо користувача 'tr' наступним чином:
Тепер призначимо цьому користувачеві єдиний привілей EXECUTE в тій схемі, де знаходиться таблиця salary:
Ми можемо переконатися в тому, що призначили потрібну привілей, відкривши «Users and Privileges» в MySQL Bench:
Тепер створимо саму ХП наступним чином:
Зауваження: всі виконані операції вимагають адмінських прав на сервері MySQL.
Після виконання цієї команди в MySQL Workbench, буде створена готова до використання ХП avg_sal. Вона повертає середню зарплату по таблиці salary.
Щоб перевірити, чи дійсно користувач tr може запустити ХП і не має доступу до таблиці salary. нам потрібно перепідключитися до сервера MySQL, залягання як tr. В MySQL Workbench це можна зробити створивши іншу сполуку і вказавши потрібного користувача і його пароль.
Після підключення з під tr. перше, що ми помічаємо, - це те, що користувач взагалі не бачить будь-яких таблиць, бачить тільки ХП:
Очевидно, що користувач tr не може звертатися до жодної з таблиць (а значить, не може бачити і докладну інформацію про зарплати з таблиці salary), але може запустити створену нами ХП, яка поверне йому середню зарплату по компанії:
Буде відображена середня зарплата.
Отже, ми виконали всю підготовчу роботу: створили користувача, призначили йому привілеї, створили ХП і протестували її. Тепер подивимося, як викликати цю ХП з PHP.
Виклик процедури, що з PHP
При використанні PDO виклик ХП досить простий. Ось відповідний PHP-код:
Змінна $ res містить середню зарплату по таблиці salary. Тепер користувач може виробляти подальшу обробку виведення за допомогою PHP.
У цій статті ми розглянули давно забуту складову баз даних MySQL. збережені процедури. Переваги використання ХП очевидні, але дозвольте мені нагадати: Збережені процедури дозволяють нам застосовувати більш строгий контроль доступу до певних даних, коли це потрібно бізнес-логікою.
Крім того, ми продемонстрували основні кроки в створенні збережених процедур, користувачів і призначення відповідних привілеїв, показали, як ХП викликаються з PHP.