Php pdo mysql приклади

Я думаю настав час підвищити свій експірієнс, і перейти при роботі з базою даних з mysql_ функцій на PDO. Ця бібліотека є потужним і швидким доповненням до PHP. Одне з її переваг - робота з багатьма базами даних (MS SQL. MySQL. PostgreSQL. Oracle та ін.). Також відмінною характеристикою цієї бібліотеки є підготовлені вираження, так звані prepared statements, які повинні прискорити роботу з базою, а головне зробити обмін даними безпечними і забути про таких вразливості як sql-enjection. Крім того, є й інші дуже корисні можливості. У цій статті я спробував зібрати часто використовувані приклади робіт, за якими можна відразу зрозуміти суть роботи PDO.

У PHP існують три розширення для роботи з базою MySQL: mysql, mysqli і PDO. PHP PDO (PHP Data Objects) включено в PHP 5.1 і вище. Як я зрозумів, на сьогоднішній момент, функції для роботи з базою даних mysql_ не рекомендують до використання, так як розробка php_mysql зупинилася на підтримку функціоналу MySQL 4.1.3. і також не підтримує транзакції, об'єктний інтерфейс і схильне уязвимостям при підстановці значень в запит. Після mysql_ з'явилося розширення mysqli (MySQL Improved в 5 версії), яке підтримує нові можливості MySQL і використовує як ОПП синтаксис так і процедурне програмування. Всі ці бібліотеки використовують стандартну клієнтську бібліотеку MySQL (libmysql). У цій же замітці давайте на живих прикладах подивимося як здійснюється робота з mysql, за допомогою самого свіжого розширення - PDO.

PDO З'єднання з БД

// приклад з'єднання з MySQL за допомогою PDO

$ Db = new PDO ( 'mysql: host = localhost; dbname = test'. $ User. $ Pass);

Як тільки буде встановлено успішне з'єднання з конкретним сервером бази даних, то буде повернутий об'єкт PDO. Цей об'єкт дозволяє виконувати найрізноманітніші завдання баз даних.

Якщо є які-небудь помилки підключення, то спрацює механізм винятків - PDOException. Потрібно завжди обертати операції PDO в блок try / catch. Ви можете зловити виняток, якщо ви хочете обробляти помилки, або ви можете залишити його для глобального обробника винятків (exception), які ви створили за допомогою set_exception_handler (). У PDO є спеціальні функції для помилок: errorCode () - поверне номер помилки, errorInfo () - поверне масив з номером помилки і описом. Вони потрібні так як за замовчуванням режим роботи з помилками варто ERRMODE_SILENT. У цьому випадку щоб побачити ці помилки доведеться їх викликати:

echo $ conn -> errorCode ();

echo $ conn -> errorInfo ();

Щоб цього не робити, в режимі розробки простіше відразу виставити потрібний режим роботи з помилками: ATTR_ERRMODE і ERRMODE_EXCEPTION. Можна також прописати кодування роботи з базою. В результаті у нас вийде такий ось код підключення:

$ Db = new PDO ( "mysql: host = $ host; dbname = $ dbname". $ User. $ Password);

$ Db -> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);

$ Db -> exec ( "set names utf8");

catch (PDOException $ e)

echo $ e -> getMessage ();

Після успішного підключення до бази даних, екземпляр класу PDO повертається в сценарій. $ Db містить дескриптор бази даних. З'єднання залишається активним протягом усього життя об'єкта PDO. Щоб закрити з'єднання, вам потрібно знищити об'єкт з гарантією, що всі інші посилання на нього будуть видалені. Зробити це можна шляхом присвоєння змінної, яка містить об'єкт, значення NULL. Якщо ви не зробите цього явно, PHP буде автоматично закривати з'єднання після завершення роботи скрипта.

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

$ Dbh = new PDO ( 'mysql: host = localhost; dbname = test'. $ User. $ Pass. Array (

PDO :: ATTR_PERSISTENT => true

Тепер, коли ви побачили, як відкривати і закривати з'єднання, давайте розглянемо інші приклади роботи з PDO. В даному випадку я збираюся показати вам, як виконувати запити до конкретної бази даних. Запити можна робити 3 функціями: exec (), query () і prepare + execute.

Перший - exec поверне тільки кількість задіяних рядків або FALSE при помилці і використовується там, де не повертаються дані, наприклад при видаленні: