SkillAgentSearch skills...

DataBase

Библиотека-обертка над стандартным PDO PHP для простой, удобной работы с различными базами данных и с защитой от SQL инъекций

Install / Use

/learn @digitalstars/DataBase
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

<p align="center"> <img alt="DataBase logo" title="DataBase это Библиотека-обертка над стандартным PDO PHP для простой, удобной работы с различными базами данных и с защитой от SQL инъекций" src="http://images.vfl.ru/ii/1594995511/ead9bb36/31100317.png"/> </p> <p align="center"> <img src="https://img.shields.io/packagist/php-v/digitalstars/DataBase" alt="php version"> <img src="https://img.shields.io/packagist/dt/digitalstars/DataBase" alt="downloads"> <img src="https://img.shields.io/github/repo-size/digitalstars/DataBase" alt="repo size"> <img src="https://img.shields.io/github/license/digitalstars/DataBase" alt="License"> </p>

Комьюнити:

Беседа ВК (Помощь) | Беседа ВК (Лог обновлений) --- | --- |

Почему DataBase?

  • Универсальность — Благодаря тому, что DataBase наследуется от PHP-PDO, её можно использовать с различными БД.
  • Простота — DataBase включает в себя удобные заполнители, которы серьёзно упрощают работу с SQL запросами. Также частые SQL запросы уже составлены и вынесены в виде методов.
  • При использовании Заполнителей, вы полностью защищены от SQL инъекций.

Функционал

В библиотеке поддерживается:

  • Все методы PHP-PDO
  • Свои заполнители
  • ORM конструкции

Оглавление

Подключение

Используя composer

composer require digitalstars/database
require_once "vendor/autoload.php"; //Подключаем библиотеку

Вручную

  1. Скачать последний релиз
  2. Подключить autoload.php

Вот так будет происходить подключение, если ваш бот находится в той же папке, что и папка DataBase-master

require_once "DataBase-master/autoload.php"; //Подключаем библиотеку

Подключение к СуБД

Синтаксис конструктора базового класса такой же, как и у PHP-PDO

use DigitalStars\DataBase\DB;

$dsn = ''; // Имя источника данных или DSN, содержащее информацию, необходимую для подключения к базе данных. 
$login = ''; // Логин
$pass = ''; // Пароль
$options = []; // Массив ключ=>значение специфичных для драйвера настроек подключения. 

$db = new DB($dsn, $login, $pass, $options);

Пример подключения к MySQL

use DigitalStars\DataBase\DB;

$db_type = 'mysql'; // Это может быть mysql, sybase или любой другой, в зависимости от вашей СуБД
$db_name = 'test'; // Имя БД
$login = 'root'; // Логин
$pass = 'pass'; // Пароль
$ip = 'localhost'; // Адрес

// С портом по умолчанию
$db = new DB("$db_type:host=$ip;dbname=$db_name", $login, $pass);

// С нестандартным портом
$port = 1234;
$db = new DB("$db_type:host=$ip;port=$port;dbname=$db_name", $login, $pass);

// Подключение с выбором кодировки UTF8
$db = new DB("$db_type:host=$ip;dbname=$db_name;charset=UTF8", $login, $pass);

// Или вот так (советуем использовать этот вариант)
$db = new DB("$db_type:host=$ip;dbname=$db_name;", $login, $pass, [
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'",
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
// В этом примере, сразу после подключения выполнится SQL запрос "SET NAMES 'utf8'"

Пример подключение к SQLite

use DigitalStars\DataBase\DB;

$db_type = 'sqlite';
$db_path = 'path/to/file/test.sqlite'; // Путь к файлу с базой данных

// Подключение
$db = new DB("$db_type:$db_path");

Что такое заполнители?

Заполнители — специальные типизированные маркеры, которые пишутся в строке SQL запроса вместо явных значений (параметров запроса), чем упрощают читаемость кода и защищают от SQL инъекций.
Заполнители поддерживаются в следующих методах:

  • exec()
  • execCommit()
  • query()
  • prepare()

О том как работают эти методы можно посмотреть в PHP-PDO.

<?php
require 'vendor/autoload.php';
use DigitalStars\DataBase\DB;

// Соединение с СУБД SQLite и получение объекта, который включает в себя все методы PHP-PDO и библиотеки
$db = new DB("sqlite:./test.sqlite");

// Получение объекта результата PDOStatement
$result = $db->query("SELECT * FROM users WHERE name = ?s AND age = ?i", ["Василий", 30]);

// Получаем данные (в виде ассоциативного массива)
$data = $result->fetch();

// Не работает запрос? Не проблема - выведите его на печать:
echo $db->getQueryString();

Параметры SQL-запроса, прошедшие через заполнители, обрабатываются специальными функциями экранирования, в зависимости от типа заполнителей. Т.е. вам теперь нет необходимости заключать переменные в функции экранирования типа quote() или приводить их к числовому типу, как это было раньше

Типы заполнителей и типы параметров SQL-запроса

Типы заполнителей и их предназначение описываются ниже. Прежде чем знакомиться с типами заполнителей, необходимо понять как работает механизм библиотеки DataBase.

$db->query("SELECT ?i", [123]); 

SQL-запрос после преобразования шаблона:

SELECT 123

В процессе исполнения этой команды библиотека проверяет, является ли аргумент 123 целочисленным значением. Заполнитель ?i представляет собой символ ? (знак вопроса) и первую букву слова integer. Если аргумент действительно представляет собой целочисленный тип данных, то в шаблоне SQL-запроса заполнитель ?i заменяется на значение 123 и SQL передается на исполнение.

Поскольку PHP слаботипизированный язык, то вышеописанное выражение эквивалентно нижеописанному:

$db->query("SELECT ?i", '123'); 

SQL-запрос после преобразования шаблона:

SELECT 123

Т.е. числа (целые и с плавающей точкой) представленные как в своем типе, так и в виде string — равнозначны с точки зрения библиотеки.

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

$db->query("SELECT ?i", '123.7'); 

SQL-запрос после преобразования шаблона:

SELECT 123

В данном примере заполнитель целочисленного типа данных ожидает значение типа integer, а передается double.

Допускаются следующие преобразования:

  • К типу int (заполнитель ?i) приводятся:
    • Числа с плавающей точкой, представленные как string или double
    • bool(true) преобразуется в int(1)
    • bool(false) и null преобразуется в int(0)
  • К типу double (заполнитель ?d) приводятся:
    • Целые числа, представленные как string или int
    • bool(true) преобразуется в float(1)
    • bool(false) и null преобразуется в float(0)
  • К типу string (заполнитель ?s) приводятся:
    • numeric преобразуется в string
    • null преобразуется в string(0) ""
    • bool(true) преобразуется в string(1) "1"
    • bool(false) преобразуется в string(1) "0"

    Это поведение отличается от приведения типа bool к int в PHP, т.к. зачастую на практике bool записывается в MySql именно как число.

  • Тип null (заполнитель ?n) просто вставляет NULL в место заполнителя.
    Входные параметры не требуются

Настройка PhpStorm

Для того, что-бы IDE нормально реагировала

View on GitHub
GitHub Stars14
CategoryData
Updated3mo ago
Forks7

Languages

PHP

Security Score

92/100

Audited on Jan 2, 2026

No findings