Pdo. Частина 3.
Відео: PHP Data Objects (PDO): Fetch types (Part 3/8)
У цій заключній статті ми розглянемо, що таке підготовлені запити, як відловлювати помилки і що таке транзакції в 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 полегшує нам життя і будете використовувати його в своїх проектах. Успіхів!
- Синій екран смерті 0x000000d3
- Синій екран смерті 0x000000d6
- Навіщо потрібен тег ruby в html.
- Nodejs. Як обробляти post запити.
- Відправка асинхронних запитів на jquery.
- Pdo. Частина 1.
- Bootstrap 4. Введення.
- Запит sql на створення і видалення бази даних
- Випадкова вибірка з бази даних
- Відправка post-запитів через jаvascript
- Створення движка на mvc. Закінчуємо роботу з чатом.
- Запит sql на вибірку записів
- Створення движка на mvc. Починаємо робити чат.
- Sql-запити для роботи з таблицями
- Чи не працює sql-запит
- Nodejs. Template engine. Частина 1.
- Оптимізація запитів до mysql
- Відправлення запитів до бази даних в php
- Bootstrap 4. Flex-властивості сітки.
- Ajax запити за допомогою методів $ .post () і $ .get ().
- Запит sql на додавання і видалення записів