<MyRusakov.ru />

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Видеокурс "Фреймворк Yii 2.0 с нуля. Пример создания сайта" обучит Вас созданию профессиональных сайтов с использованием фреймворка Yii. В курсе есть 2 раздела: теоретический и практический. В теоретическом разделе будут разобраны возможности фреймворка Yii с примерами их использования, а в практической части будет создан сайт Blog.MyRusakov.ru с помощью полученных знаний из теоретического раздела.

Так же почти ко всем урокам идут упражнения для закрепления материала из урока на практике.

После прохождения курса Вы без труда сможете создавать любые сайты с использованием фреймворка Yii, причём делать это будете быстро и качественно.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

PDO. Часть 3.

PDO. Часть 3.

В этой заключительной статье мы рассмотрим, что такое подготовленные запросы, как отлавливать ошибки и что такое транзакции в PDO.

Подготовленные запросы

Когда мы выполняем какой-то запрос к базе данных, он анализируется и оптимизируется, что, естественно, занимает время. Если у нас много сложных запросов, то это может выполняться очень даже долго. Используя же подготовленные запросы, это делается один раз, а затем мы можем использовать наш запрос сколько угодно раз. Также, нам не нужно экранировать параметры, т.к. драйвер базы данных сделает всё сам. Давайте посмотрим, как их использовать.

$stmt = $db->prepare("INSERT INTO articles (title, text) VALUES (:title, :text)");
$stmt->bindParam(':title', $title);
$stmt->bindParam(':text', $text);

$title = 'название статьи 1';
$text = 'Какой-то текст к первой статье';
$stmt->execute();

$title = 'название статьи 2';
$text = 'Какой-то текст ко второй статье';
$stmt->execute();

Чтобы подготовить запрос, мы пишем его в методе prepare, где вместо значений мы указываем строчку такого вида: ":название". В методе bindParam мы указываем, к какой строчке какие данные привязать. В нашем случае к строчке :title привязываются данные из переменной $title, а к строчке :text - данные из переменной $text. Чтобы выполнить запрос, нужно вызвать метод execute. Такие параметры называются именованными, теперь посмотрим на неименованные.

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

$title = 'название статьи 1';
$text = 'Какой-то текст к первой статье';
$stmt->execute();

$title = 'название статьи 2';
$text = 'Какой-то текст ко второй статье';
$stmt->execute();

Здесь всё идентично, кроме того, что вместо строчки :название указывается знак вопроса, а в методе bindParam цифра 1 означает первый знак вопроса, а цифра 2 - второй знак вопроса. Используйте тот способ, который вам больше нравится.

Отлавливание ошибок

Чтобы отлавливать ошибки, мы используем уже знакомую нам конструкцию try-catch и класс PDOException.

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

В качестве примера, я допустил ошибку и написал myql, а не mysql. Эта ошибка будет отловлена и нам выведится её текст и на какой линии произошла ошибка.

Транзакции

Давайте рассмотрим транзакции сразу на примере.

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

  $stmt = $db->exec("INSERT INTO `articles`(`title`) VALUES('title1')");
  $stmt = $db->exec("INSERT INTO `articles`(`title`) VALUES('title2')");
  exit('error');

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

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

beginTransaction означает, что мы начинаем транзакцию. Commit подтверждает изменения, а rollBack отменяет всё.

Суть транзакций в том, что мы либо делаем всё, либо не делаем ничего. В нашем примере мы вставляем в таблицу articles значения title1, title2, title3. Но после вставки второго значения, мы сэмулировали ошибку, остановив скрипт с помощью exit. Если бы мы не использовали транзакции, то у нас первые два title вставились бы, а последний нет. В нашем примере это не существенно, но бывают случаи, когда это может привести к серьёзным сбоям в работе приложения. Вот, чтобы такого не случалось, мы и используем транзакции, где метод rollBack вернёт всё в первоначальный вид и наши первые два title тоже вставлены не будут, а если всё прошло удачно, без ошибок, то метод commit подтвердит изменения и все три title будут успешно вставлены.

Заключение

Итак, в наших трёх статьях, посвящённых изучению PDO, мы разобрали всё, что нужно, чтобы с лёгкостью использовать этот интерфейс. Думаю, вы поняли, как PDO облегчает нам жизнь и будете использовать его в своих проектах. Удачи!

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.