<MyRusakov.ru />

WordPress 6 с Нуля до Гуру

WordPress 6 с Нуля до Гуру

Этот курс научит Вас созданию самых разных сайтов на самой популярной в мире CMS - WordPress. Вы увидите установку и настройку локального сервера, разбор каждой настройки, каждой кнопки и каждого пункта меню в панели WordPress.

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

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

И, наконец, к курсу идёт ценнейший Бонус по тому, как используя ChatGPT и создавая контент для сайта, можно выйти на пассивный доход. Вы наглядно увидите, как зарегистрироваться в ChatGPT (в том числе, и если Вы из России), как правильно выбрать тему для сайта, как правильно генерировать статьи для него(чтобы они индексировались поисковыми системами) и как правильно монетизировать трафик на сайте.

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

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

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

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

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

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

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

Какая тема Вас интересует больше?

Класс для работы с базой данных SQLite в PHP

Класс для работы с базой данных SQLite в PHP

Доброго времени суток! В данной статье мы рассмотрим с Вами пример реализации работы с базой данных SQLite в PHP.

SQLite - это переносимая база данных, которая, как правило, представлена одним файлом. В PHP 8 расширение с этой БД поставляется по умолчанию, т.е. дополнительно ничего устанавливать не требуется.

И так, для начала определим интерфейс для работы с базой. Зачем это нужно? Например, через некоторое время нам понадобиться перейти с SQLite на MySQL. Если мы будем использовать интерфейс - достаточно будет поменять реализацию в одном месте программы.

Код с интерфейсом DBInterface.php


<?php

namespace App\Core;

interface DBInterface
{
    // название таблицы с которой будем работать
    public function table(string $table);

    // возвращает все строки
    public function getAll(int $limit);

    // возвращает строку таблицы по ее id - первичный ключ
    public function get($id);

    // вставляет значение в таблицу
    public function insert($data);

    // обновляет
    public function update($id, $data);

    // удаляет
    public function delete($id);
}

А теперь пример реализации интерфейса выше. Реализация будет для БД SQLite.

Файл SQLiteDB.php


<?php

namespace App\Core;


class SQLiteDB implements DBInterface
{
    // для работы с SQLite используем PDO (расширение pdo_sqlite)
    private \PDO $db;
    private static ?SQLiteDatabase $instance = null;
    private string $table;


    // запрещаем напрямую создавать объект класса
    private function __construct(string $pathToDb)
    {
        $this->db = new \PDO("sqlite:" . $pathToDb);
        $this->db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
    }

    // несколько вызовов connect вернут один экземпляр подключения к БД
    public static function connect(string $dbFile): self
    {
        if (self::$instance == null) {
            self::$instance = new self($dbFile);
        }

        return self::$instance;
    }

    /**
    * 
    * После вызова конструктора класса, нужно (!) вызвать данный метод и передать в него название таблицы
    * с которой будет идти работа 
    * 
    * @param string $table
    * @return void
     */
    public function table(string $table): void
    {
        $this->table = $table;
    }

    public function get($id)
    {
        $sql = sprintf("SELECT * FROM %s WHERE id = :id", $this->table);
        $stmt = $this->db->prepare($sql);

        $stmt->bindParam(":id", $id);
        $stmt->execute();

        return $stmt->fetch(\PDO::FETCH_ASSOC);
    }

    public function getAll(int $limit = 3): array
    {
        $sql = "SELECT * FROM $this->table LIMIT :limit";
        $statement = $this->db->prepare($sql);
        $statement->bindParam(":limit", $limit);
        $statement->execute();

        return $statement->fetchAll(\PDO::FETCH_ASSOC);
    }

    public function insert($data): bool
    {
        $keys = implode(", ", array_keys($data));
        $values = ":" . implode(", :", array_keys($data));
        $sql = sprintf("INSERT INTO %s (%s) VALUES (%s)", $this->table, $keys, $values);

        $statement = $this->db->prepare($sql);

        foreach ($data as $key => $value) {
            $statement->bindValue(":$key", $value);
        }

        return $statement->execute();
    }

    public function update($id, $data): int
    {
        $set = [];
        foreach ($data as $key => $value) {
            $set[] = "$key = :$key";
        }

        $set = implode(", ", $set);
        $sql = "UPDATE $this->table SET $set WHERE id = :id";

        $stmt = $this->db->prepare($sql);
        $stmt->bindParam(":id", $id);

        foreach ($data as $key => $value) {
            $stmt->bindValue(":$key", $value);
        }

        return $stmt->execute();
    }

    public function delete($id): int
    {
        $sql = "DELETE FROM $this->table WHERE id = :id";
        $stmt = $this->db->prepare($sql);
        $stmt->bindParam(":id", $id);
        return $stmt->execute();
    }
}

Как использовать?


// здесь у Вас уже должна быть некая база со строками в таблице posts
$db = SQLiteDB::connect("app_02052023.db");
$db->table("posts");

// получаем первые 10 статей
$posts = $db->getAll(10);
print_r($posts);

// получаем статью с идентификатором 1
$post = $db->get(1);
print_r($post);

Вот так просто можно организовать работу с базой SQLite в PHP через PDO, а реализация интерфейса DBInterface, при необходимости, позволит перейти на БД MySQL, например.

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

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

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

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

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

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

  1. Кнопка:

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

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

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

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

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

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