Підготовлені запити та процедури, що зберігаються

Більшість баз даних підтримують концепцію підготовлених запитів. Що це таке? Це можна описати, як вид скомпілюваного шаблону SQL запиту, який буде запускатися програмою і налаштовуватися за допомогою вхідних параметрів. Підготовлені запити мають дві головні переваги:

  • Запит необхідно якось підготувати і потім його можна запускати стільки разів, скільки потрібно, причому як з тими ж, так і з параметрами, що відрізняються. Коли запит підготовлено, СУБД аналізує його, компілює та оптимізує план його виконання. У разі складних запитів цей процес може займати відчутний час і помітно уповільнити роботу програми, якщо потрібно багато разів виконувати запит із різними параметрами. При використанні підготовленого запиту СУБД аналізує/компілює/оптимізує запит будь-якої складності лише один раз, а програма запускає на виконання вже підготовлений шаблон. Таким чином, підготовлені запити споживають менше ресурсів і працюють швидше.
  • Параметри підготовленого запиту не потрібно екранувати лапками; драйвер робить це автоматично. Якщо в додатку використовуються виключно підготовлені запити, розробник може бути впевнений, що ніяких SQL-ін'єкцій статися не може (проте, якщо інші частини тексту запиту створюються з неекранованим введенням, то ін'єкція SQL як і раніше можлива).

Підготовлені запити також корисні тим, що PDO може емулювати їх, якщо драйвер бази даних немає подібної функціональності. Це означає, що програма може користуватися однією і тією ж методикою доступу до даних незалежно від можливостей СУБД.

Приклад #1 Вставки, що повторюються, в базу з використанням підготовлених запитів

У цьому прикладі 2 рази виконується INSERT запит з різними значеннями nameиvalue, які підставляються замість відповідних псевдозмінних:

Loading...

Приклад #2 Вставки в базу, що повторюються, з використанням підготовлених запитів

У цьому прикладі 2 рази виконується INSERT запит з різними значеннями nameиvalue, які підставляються замість псевдозмінних ?

Loading...

Приклад #3 Вибір даних з використанням підготовлених запитів

У цьому прикладі проводиться вибірка з бази ключа, який вводить користувач через форму. Введення користувача автоматично полягає в лапки, тому немає ризику SQL ін'єкції.

Loading...

Приклад #4 Виклик збереженої процедури з вихідними параметрами

Якщо СУБД підтримує вихідні параметри, програма може користуватися ними як і вхідними. Вихідні параметри зазвичай використовують для отримання даних зі збережених процедур. Користуватися вихідними параметрами дещо складніше, оскільки розробнику необхідно знати максимальний розмір значень, що витягуються, ще на етапі завдання цих параметрів. Якщо вилучене значення виявиться більшим, ніж передбачалося, буде викликана помилка.

Loading...

Приклад #5 Виклик збереженої процедури з вхідним/вихідним параметром

Можна задати параметр одночасно вхідним та вихідним; синтаксис у своїй той самий, як і вихідних параметрів. У наступному прикладі рядок 'привіт' передається в процедуру, що зберігається, а потім цей рядок буде замінений повертається значенням.

Loading...

Приклад #6 Неправильне використання псевдозмінної

Loading...