<MyRusakov.ru />

Создание движка на PHP и MySQL 2.0

Создание движка на PHP и MySQL 2.0

Видеокурс "Создание движка на PHP и MySQL 2.0" научит Вас создавать профессиональные движки для сайтов на PHP и MySQL с использованием ООП и паттерна MVC.

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

В практической части будет создан движок с чистого листа. Будет создано ядро, все адаптеры, все вспомогательные классы, а также классы для работы с объектами базы данных. И чтобы курс был максимально полезным, будет создан движок для сайта MyRusakov.ru.

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

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

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

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

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

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

PDO. Часть 2.

PDO. Часть 2.

В этой статье мы разберём основные методы для работы с данными в PDO.

Для начала давайте установим соединение с нашей базой данных MySQL.

$host = 'localhost'; // хост
$dbname = 'test'; // название базы
$user = "admin"; // логин пользователя
$pass = 123; // пароль
$db = new PDO("mysql:host=$host;dbname=$db", $user, $password);

В результате, в $db попадёт объект, используя который мы сможем работать с нашей базой. Давайте этим и займёмся.

К примеру, мы хотим что-нибудь вставить, тогда будем использовать метод exec.

$sql = "INSERT INTO(login, password) VALUES($login, $password)";
$res = $db->exec($sql);

Наш запрос будет выполнен, а в переменную $res попадёт количество затронутых строк.

exec выполняет запросы, но не может получить данные из БД, этим занимается метод query.

$sql = "SELECT login FROM users"; $res = $db->query($sql);

Однако не стоит забывать про безопасность и про то, что данные нужно проверять. Для этого раньше нам нужно было сделать примерно следующее:

$sql = "SELECT * FROM users WHERE login = $login";
$login = $_POST["login"];
$login = mysql_real_escape_string($login); // MySQL
$login = sqlite_escape_string($login); // sqlite
$login = pg_escape_string($login); // PostgreSQL

Теперь за нас всё сделает PDO и его метод quote.

$login = $db->quote($login);
$result = $db->query($sql);

Чтобы преобразовать вернувшийся результат в массив, мы использовали функции mysqli_fetch_assoc() для ассоциативного и mysqli_fetch_num() для нумерованного массива. Посмотрим, как это делается в PDO.

$stmt = $db->query($sql);

$res = $stmt->FETCH(PDO::FETCH_ASSOC); // ассоциативный

$res = $stmt->FETCH(PDO::FETCH_NUM); // нумерованный

$res = $stmt->FETCH(PDO::FETCH_BOTH); // ассоциативный и нумерованный вместе

$res = $stmt->FETCH(PDO::FETCH_OBJ); // объектный тип

$res = $stmt->FETCH(PDO::FETCH_LAZY); // сразу все типы

Думаю, тут всё понятно. Мы просто вызываем метод FETCH и передаём туда соотвествующую константу. В использовании проблем возникнуть так же не должно.

echo $res["name"]; // ассоциативный

echo $res[0]; // нумерованный

echo $res->name; // объектный

Используя константу FETCH_LAZY, вы можете извлекать данные любым удобным для вас способом, но помните, что это плохо для производительности.

Метод FETCH возвращает одну запись, а чтобы получить все, нам следует использовать FETCHALL.

$stmt = $db->query("SELECT * FROM users");
$res = $stmt->FETCHALL(PDO::FETCH_ASSOC);
foreach($res as $arr) {
  echo $arr["name"]."<br>";
}

Тут пояснять нечего. Давайте лучше поговорим про константу FETCH_CLASS. Эта константа позволяет нам заполнить наш класс данными, полученными из БД.

class User {

  public $login;
  public $pass;

  public function showInfo() {
   echo "<b>".$this->pass."</b>"." : ".$this->login."<br>";
  }
}

$db = new PDO("mysql:host=localhost;dbname=test", "root", "");
$stmt = $db->query("SELECT * FROM `users`");
$result = $stmt->FETCHALL(PDO::FETCH_CLASS, "User");

foreach($result as $user) {
  $user->showInfo();
}

В методе FETCHALL мы указываем константу FETCH_CLASS, а затем название класса в кавычках. После мы перебираем объект с результатом с помощью цикла foreach и выводим информацию. Главное помните, что названия свойств в классе обязаны быть такими же, как и названия полей в базе данных.

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

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

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

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

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

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

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

  1. Кнопка:

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

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

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

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

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

Васек Васек 09.09.2016 19:29:25

$host = 'localhost'; // хост $dbname = 'test'; // название базы $user = "admin"; // логин пользователя $pass = 123; // пароль $db = new PDO("mysql:host=$host;dbname=$db", $user, $password); Михаил в данном фрагменте допущены ошибки переменные разные в одном месте переменная $pass, а в другом месте называется $password и еще одна $dbname, а в другом месте просто $db. Я использую БД mysql пришлось моленько изменить запрос sql добавление после INTO названия Таблицы, также поэкспериминтировал с `` - кавычками вокруг параметров они на выполнение запроса не повлияли, также ;-точка с запятой в конце запроса на работу не повлияли. ЕСЛИ ЧИТАЕТЕ КОММЕНТАРИИ НАПИШИТЕ

Ответить

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