Pdo. Частина 3.

Відео: PHP Data Objects (PDO): Fetch types (Part 3/8)

PDO. Частина 3.

У цій заключній статті ми розглянемо, що таке підготовлені запити, як відловлювати помилки і що таке транзакції в PDO.

підготовлені запити

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

Відео: PDO-OOP-PHP-CRUD-with-Bootstrap 2016 (Fetch Type) | Part-3

$ stmt = $ db-gt;prepare("INSERT INTO articles (title, text) VALUES (: title,: text)") -
$ stmt
-gt;bindParam(`: Title`, $ title) -
$ stmt
-gt;bindParam(`: Text`, $ text) -

$ title
=`Назва статті 1`-
$ text
=`Якийсь текст до першої статті`-
$ stmt
-gt;execute() -

$ title
=`Назва статті 2`-
$ text
=`Якийсь текст до другої статті`-
$ stmt
-gt;execute() -

Щоб підготувати запит, ми пишемо його в методі prepare, де замість значень ми вказуємо рядок такого виду: ": Назва". У методі bindParam ми вказуємо, до якої рядку які дані прив`язати. У нашому випадку до рядку : title прив`язуються дані з змінної $ title, а до рядку : text - дані з змінної $ text. Щоб виконати запит, потрібно викликати метод execute. Такі параметри називаються іменованими, тепер подивимося на неіменовані.

$ stmt = $ db-gt;prepare("INSERT INTO articles (title, text) VALUES (?,?)") -
$ stmt
-gt;bindParam(1, $ title) -
$ stmt
-gt;bindParam(2, $ text) -

$ title
=`Назва статті 1`-
$ text
=`Якийсь текст до першої статті`-
$ stmt
-gt;execute() -

$ title
=`Назва статті 2`-
$ text
=`Якийсь текст до другої статті`-
$ stmt
-gt;execute() -



Тут все ідентично, крім того, що замість рядка : назва вказується знак питання, а в методі bindParam цифра 1 означає перший знак питання, а цифра 2 - другий знак питання. Використовуйте той спосіб, який вам більше подобається.

Відео: [PDO] Урок №3 - Транзакції (в кінці сюрприз)

відлов помилок

Щоб відловлювати помилки, ми використовуємо вже знайому нам конструкцію try-catch і клас PDOException.

try{
$ db
=new PDO("Myql: host = $ host-dbname = $ dbname", $ user, $ pass) -
}catch(PDOException $ e){
echo
"You have an error:".$ e-gt;getMessage()."
"
-
echo
"On line:".$ e-gt;getLine() -
}



Як приклад, я припустився помилки і написав myql, а не mysql. Ця помилка буде виловлено та нам виведені її текст і на якій лінії сталася помилка.

транзакції

Давайте розглянемо транзакції відразу на прикладі.

try{
$ db
=new PDO("Mysql: host = $ host-dbname = $ dbname", $ user, $ pass) -
$ db
-gt;beginTransaction() -

$ stmt
= $ db-gt;exec("INSERT INTO` articles` ( `title`) VALUES ( `title1`)") -
$ stmt
= $ db-gt;exec("INSERT INTO` articles` ( `title`) VALUES ( `title2`)") -
exit(`Error`) -

$ stmt
= $ db-gt;exec("INSERT INTO` articles` ( `title`) VALUES ( `title3`)") -
$ db
-gt;commit() -

}catch(PDOException $ e){
$ db
-gt;rollBack() -
}

beginTransaction означає, що ми починаємо транзакцію. Commit підтверджує зміни, а rollBack скасовує все.

Відео: PHP, MySQL, and PDO - Part 3

Суть транзакцій в тому, що ми або робимо все, або не робимо нічого. У нашому прикладі ми вставляємо в таблицю articles значення title1, title2, title3. Але після вставки другого значення, ми семуліровать помилку, зупинивши скрипт за допомогою exit. Якби ми не використовували транзакції, то у нас перші два title вставили б, а останній немає. У нашому прикладі це не суттєво, але бувають випадки, коли це може призвести до серйозних збоїв в роботі програми. Ось, щоб такого не траплялося, ми і використовуємо транзакції, де метод rollBack поверне все в первинний вигляд і наші перші два title теж вставлені не будуть, а якщо все пройшло вдало, без помилок, то метод commit підтвердить зміни і все три title будуть успішно вставлені.

висновок

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

Поділися в соціальних мережах:

Схожі
Відправка асинхронних запитів на jquery.Відправка асинхронних запитів на jquery.
Запит sql на вибірку записівЗапит sql на вибірку записів
Pdo. Частина 1.Pdo. Частина 1.
Відправлення запитів до бази даних в phpВідправлення запитів до бази даних в php
Синій екран смерті 0x000000d6Синій екран смерті 0x000000d6
Nodejs. Як обробляти post запити.Nodejs. Як обробляти post запити.
Ajax запити за допомогою методів $ .post () і $ .get ().Ajax запити за допомогою методів $ .post () і $ .get ().
Створення движка на mvc. Закінчуємо роботу з чатом.Створення движка на mvc. Закінчуємо роботу з чатом.
Відправка post-запитів через jаvascriptВідправка post-запитів через jаvascript
Випадкова вибірка з бази данихВипадкова вибірка з бази даних
» » Pdo. Частина 3.