Доступ до бази даних в php
Практична частина використання PDO API для роботи з базою даних.
Для з'єднання з базою даних MySQL є три різних API:
- mysql
- mysqli - MySQL Improved (покращена)
- pdo - PHP Data Objects (об'єкти даних PHP)
Традиційний API mysql добре виконує свою роботу і отримав широке поширення завдяки тому, що робить процес отримання записів з бази даних дуже простим. наприклад:
Так, наведений приклад дуже простий. Але у нього є істотні недоліки:
- Застарів: хоча офіційно його не визнають застарілим, але для нових додатків і навчання краще використовувати інші API.
- Очищення: процес очищення введення користувача від непотрібного коду лягає на плечі розробника.
- Гнучкість: даний API не гнучкі і працює тільки з базою даних MySQL. А якщо потрібно перейти на іншу?
PDO (PHP Data Objects) надає більш потужний інструмент для використання. Не потрібно думати про драйвер бази даних, можна використовувати підготовлені вираження, виключаються ін'єкції коду SQL.
На перший погляд PDO API виглядає страхітливо. Чи не тому що він надмірно складний, а тому що mysql є дуже простим! Потрібно просто зробити кілька нескладних дій.
з'єднання
Ви вже знаєте застарілий спосіб з'єднання з базою даної MySQL:
При роботі з PDO потрібно створити новий екземпляр класу, вказати драйвер, ім'я бази даних, ім'я користувача і пароль:
Перевагою даного підходу є простота зміни бази даних. Досить поміняти ім'я джерела даних. Немає залежності від MySQL як при використанні функції mysql_connect.
Але що якщо станеться помилка при з'єднанні з базою даних? Обгорнемо все в блок try / catch:
Зверніть увагу на те, що за замовчуванням для PDO встановлений режим роботи з помилками PDO :: ERRMODE_SILENT. Якщо все залишити без зміни, то доведеться вручну обробляти помилки після виконання запиту.
При розробці краще встановлювати режим PDO :: ERRMODE_EXCEPTION. в якому необроблені помилки будуть викликати виключення і зупинку скрипта.
Можна налаштувати режим роботи з помилками:
- PDO :: ERRMODE_SILENT
- PDO :: ERRMODE_WARNING
- PDO :: ERRMODE_EXCEPTION
отримуємо дані
Отже, у нас є з'єднання з базою даних і тепер потрібно отримати дані. Є два способи вирішити поставлене завдання: query і execute. Розглянемо обидва.
Хоча вище наведений приклад буде працювати, нам потрібно вручну очищати дані користувача за допомогою методу PDO :: quote. Даний метод еквівалентний функції mysql_real_escape_string (в обох випадках рядок очищається і полягає в лапки). У випадках, коли потрібно побудувати запит SQL з використанням призначених для користувача даних, краще застосовувати підготовлені вираження. Тобто, якщо запит SQL не залежить від введення користувача, метод query буде відмінним вибором, а результат можна обробити виразом foreach.
В даному прикладі використовується також метод prepare для підготовки запиту, перед тим, як приєднати дані користувача. В такому випадку ін'єкція SQL теоретично неможлива, так як самі дані не вставляються в текст запиту SQL. Використовується іменований параметр (: id) для позначення місця.
Потім виконується запит з передачею масиву, який містить дані, які слід використовувати на місці іменованого параметра.
В якості альтернативи можна використовувати метод bindParam:
обробляємо дані
Після виклику методу execute є кілька способів отримати дані: масив (за замовчуванням), об'єкт і так далі. У вище наведеному прикладі використовується стандартний режим: PDO :: FETCH_ASSOC. Його легко поміняти, якщо потрібно:
Тепер результат буде у вигляді об'єкта. Доступні такі опції:
- PDO :: FETCH_ASSOC: Повертає масив.
- PDO :: FETCH_BOTH: Повертає масив, проіндексований по колонці з ім'ям.
- PDO :: FETCH_BOUND: Повертає TRUE і призначає значення стовпців в наборі результату пов'язаним змінним PHP.
- PDO :: FETCH_CLASS: Повертає новий екземпляр зазначеного класу.
- PDO :: FETCH_OBJ: Повертає анонімний об'єкт, з іменами властивостей, відповідних стовпцях.
Вище наведений код не має зворотного зв'язку на випадок відсутності результату. Виправимо ситуацію:
Повний код буде виглядати наступним чином:
багаторазове виконання
PDO проявляє свою силу у випадках, коли треба виконати один і той же запит SQL кілька разів, але з різними параметрами.
Як тільки запит підготовлений, його можна виконати кілька разів з різними параметрами. Вище наведений код вставляє два рядки в базу даних: одна з ім'ям "Kevin," а інша - "Steven."
Типові операції з базою даних (CRUD)
Розглянемо виконання типових операцій з даними (CRUD - Create, Read, Update, Delete створення, читання, оновлення, видалення). Зверніть увагу, що код для них буде дуже схожим.
Створення (Вставка)
оновлення
За рахунок отримання інформації відразу по двох каналах (зір і слух) ефективність навчання значно перевершує навчання по книгах. А домашні завдання і онлайн-тести дозволять вам постійно думати на мові, що вивчається і відразу перевіряти свої знання!
Якщо ви давно хочете як слід вивчити HTML, то у мене для Вас є чудова новина!
Якщо ви вже вивчили HTML і хочете рухатися далі, то наступним кроком буде вивчення технології CSS.
Якщо ви хочете розібратися з поняттями домену і хостингу, навчитися створювати бази даних, закачувати файли сайту на сервер по FTP, створювати піддомени, налаштовувати поштові скриньки для свого сайту і стежити за його відвідуваністю, то цей курс створений спеціально для вас!