Конструктор баз данных php
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
- Поддержка sleep/wakeup
- Изменены названия методов в классе Statement (старые методы назывались не в CamelCase стиле по историческим причинам)
- Изменено пространство имён
- Больше не поддерживается, советую переходить на релиз v2.0
Что такое Database?
Database — библиотека классов на PHP >= 5.3 для простой, удобной, быстрой и безопасной работы с базой данных MySql, использующая расширение PHP mysqli.
Зачем нужен самописный класс для MySql, если в PHP есть абстракция PDO и расширение mysqli?
Основные недостатки всех библиотек для работы с базой в PHP это:
- Многословность
- Что бы предотвратить SQL-инъекции, у разработчиков есть два пути:
- Использовать подготавливаемые запросы (prepared statements).
- Вручную экранировать параметры идущие в тело SQL-запроса. Строковые параметры прогонять через mysqli_real_escape_string(), а ожидаемые числовые параметры приводить к соответствующим типам — int и float .
- Подготавливаемые запросы ужасно многословны. Пользоваться "из коробки" абстракцией PDO или расширением mysqli, без агрегирования всех методов для получения данных из СУБД просто невозможно — что бы получить значение из таблицы необходимо написать минимум 5 строк кода! И так на каждый запрос!
- Экранирование вручную параметров, идущих в тело SQL-запроса — даже не обсуждается. Хороший программист — ленивый программист. Всё должно быть максимально автоматизировано.
- Что бы понять, почему в программе не работает SQL-запрос, его нужно отладить — найти либо логическую, либо синтаксическую ошибку. Что бы найти ошибку, необходимо "видеть" сам SQL-запрос, на который "ругнулась" база, с подставленными в его тело параметрами. Т.е. иметь сформированный полноценный SQL. Если разработчик использует PDO, с подготавливаемыми запросами, то это сделать. НЕВОЗМОЖНО! Никаких максимально удобных механизмов для этого в родных библиотеках НЕ ПРЕДУСМОТРЕНО. Остается либо извращаться, либо лезть в лог базы данных.
Решение: Database — класс для работы с MySql
- Избавляет от многословности — вместо 3 и более строк кода для исполнения одного запроса при использовании "родной" библиотеки, вы пишите всего 1.
- Экранирует все параметры, идущие в тело запроса, согласно указанному типу заполнителей — надежная защита от SQL-инъекций.
- Не замещает функциональность "родного" mysqli адаптера, а просто дополняет его.
Чем НЕ является библиотека Database?
Большинство оберток под различные драйверы баз данных являются нагромождением бесполезного кода с отвратительной архитектурой. Их авторы, сами не понимая практической цели своих оберток, превращают их в подобие построителей запросов (sql builder), ActiveRecord библиотек и прочих ORM-решений.
Библиотека Database не является ничем из перечисленных. Это лишь удобный инструмент для работы с обычным SQL в рамках СУБД MySQL — и не более!
Что такое placeholders (заполнители)?
Placeholders (англ. — заполнители) — специальные типизированные маркеры, которые пишутся в строке SQL запроса вместо явных значений (параметров запроса). А сами значения передаются "позже", в качестве последующих аргументов основного метода, выполняющего SQL-запрос:
Параметры SQL-запроса, прошедшие через систему placeholders, обрабатываются специальными механизмами экранирования, в зависимости от типа заполнителей. Т.е. вам теперь нет необходимости заключать переменные в функции экранирования типа mysqli_real_escape_string() или приводить их к числовому типу, как это было раньше:
Теперь запросы стало писать легко, быстро, а главное библиотека Database полностью предотвращает любые возможные SQL-инъекции.
Типы заполнителей и типы параметров SQL-запроса
Типы заполнителей и их предназначение описываются ниже. Прежде чем знакомиться с типами заполнителей, необходимо понять как работает механизм библиотеки Database.
SQL-запрос после преобразования шаблона:
В процессе исполнения этой команды библиотека проверяет, является ли аргумент 123 целочисленным значением. Заполнитель ?i представляет собой символ ? (знак вопроса) и первую букву слова integer . Если аргумент действительно представляет собой целочисленный тип данных, то в шаблоне SQL-запроса заполнитель ?i заменяется на значение 123 и SQL передается на исполнение.
Поскольку PHP слаботипизированный язык, то вышеописанное выражение эквивалентно нижеописанному:
SQL-запрос после преобразования шаблона:
т.е. числа (целые и с плавающей точкой) представленные как в своем типе, так и в виде string — равнозначны с точки зрения библиотеки.
Приведение к типу заполнителя
SQL-запрос после преобразования шаблона:
В данном примере заполнитель целочисленного типа данных ожидает значение типа integer , а передается double . По-умолчанию библиотека работает в режиме приведения типов, что дало в итоге приведение типа double к int .
Режимы работы библиотеки и принудительное приведение типов
Существует два режима работы библиотеки:
- Mysql::MODE_STRICT — строгий режим соответствия типа заполнителя и типа аргумента. В режиме MODE_STRICT аргументы должны соответствовать типу заполнителя. Например, попытка передать в качестве аргумента значение 55.5 или '55.5' для заполнителя целочисленного типа ?i приведет к выбросу исключения:
- Mysql::MODE_TRANSFORM — режим преобразования аргумента к типу заполнителя при несовпадении типа заполнителя и типа аргумента. Режим MODE_TRANSFORM установлен по-умолчанию и является "толерантным" режимом — при несоответствии типа заполнителя и типа аргумента не генерирует исключение, а пытается преобразовать аргумент к нужному типу заполнителя посредством самого языка PHP. К слову сказать, я, как автор библиотеки, всегда использую именно этот режим, строгий режим (Mysql::MODE_STRICT) я сделал чисто "по фану" и в реальной работе никогда не использовал.
Допускаются следующие преобразования в режиме Mysql::MODE_TRANSFORM:
- К типу int (заполнитель ?i ) приводятся
- числа с плавающей точкой, представленные как string или тип double
- bool TRUE преобразуется в int(1) , FALSE преобразуется в int(0)
- null преобразуется в int(0)
- целые числа, представленные как string или тип int
- bool TRUE преобразуется в float(1) , FALSE преобразуется в float(0)
- null преобразуется в float(0)
- bool TRUE преобразуется в string(1) "1" , FALSE преобразуется в string(1) "0" . Это поведение отличается от приведения типа bool к int в PHP, т.к. зачастую, на практике, булев тип записывается в MySql именно как число.
- значение типа numeric преобразуется в строку согласно правилам преобразования PHP
- NULL преобразуется в string(0) ""
- любые аргументы.
Какие типы заполнителей представлены в библиотеке Database?
?i — заполнитель целого числа
ВНИМАНИЕ! Если вы оперируете числами, выходящими за пределы PHP_INT_MAX, то:
?d — заполнитель числа с плавающей точкой
ВНИМАНИЕ! Если вы используете библиотеку для работы с типом данных double , установите соответствующую локаль, что бы разделитель целой и дробной части был одинаков как на уровне PHP, так и на уровне СУБД.
?s — заполнитель строкового типа
Значение аргументов экранируются с помощью функции PHP mysqli_real_escape_string() :
SQL-запрос после преобразования шаблона:
?S — заполнитель строкового типа для подстановки в SQL-оператор LIKE
Значение аргументов экранируются с помощью функции PHP mysqli_real_escape_string() + экранирование спецсимволов, используемых в операторе LIKE ( % и _ ):
SQL-запрос после преобразования шаблона:
?n — заполнитель NULL типа
Значение любых аргументов игнорируются, заполнители заменяются на строку NULL в SQL запросе:
SQL-запрос после преобразования шаблона:
?A* — заполнитель ассоциативного множества из ассоциативного массива, генерирующий последовательность пар ключ = значение
Пример: "key_1" = "val_1", "key_2" = "val_2", . "key_N" = "val_N"
где * после заполнителя — один из типов:
- i (заполнитель целого числа)
- d (заполнитель числа с плавающей точкой)
- s (заполнитель строкового типа)
правила преобразования и экранирования такие же, как и для одиночных скалярных типов, описанных выше. Пример:
SQL-запрос после преобразования шаблона:
?a* — заполнитель множества из простого (или также ассоциативного) массива, генерирующий последовательность значений
Пример: "val_1", "val_2", . "val_N"
где * после заполнителя — один из типов:
- i (заполнитель целого числа)
- d (заполнитель числа с плавающей точкой)
- s (заполнитель строкового типа)
правила преобразования и экранирования такие же, как и для одиночных скалярных типов, описанных выше. Пример:
SQL-запрос после преобразования шаблона:
?A[?n, ?s, ?i, . ] — заполнитель ассоциативного множества с явным указанием типа и количества аргументов, генерирующий последовательность пар ключ = значение
SQL-запрос после преобразования шаблона:
?a[?n, ?s, ?i] — заполнитель множества с явным указанием типа и количества аргументов, генерирующий последовательность значений
SQL-запрос после преобразования шаблона:
?f — заполнитель имени таблицы или поля
Данный заполнитель предназначен для случаев, когда имя таблицы или поля передается в запросе через параметр. Имена полей и таблиц обрамляется символом апостроф:
SQL-запрос после преобразования шаблона:
Библиотека требует от программиста соблюдения синтаксиса SQL. Это значит, что следующий запрос работать не будет:
— заполнитель ?s необходимо взять в одинарные или двойные кавычки:
SQL-запрос после преобразования шаблона:
Для тех, кто привык работать с PDO это покажется странным, но реализовать механизм, определяющий, нужно ли в одном случае заключать значение заполнителя в кавычки или нет — очень нетривиальная задача, трубующая написания целого парсера.
Примеры работы с библиотекой
Примеры для понимания сути заполнителей
Различные варианты INSERT:
Простая вставка данных через заполнители разных типов:
SQL-запрос после преобразования шаблона:
Вставка значений через заполнитель ассоциативного множества типа string:
SQL-запрос после преобразования шаблона:
Вставка значений через заполнитель ассоциативного множества с явным указанием типа и количества аргументов:
SQL-запрос после преобразования шаблона:
Различные варианты SELECT
Укажем некорректный числовой параметр - значение типа double:
SQL-запрос после преобразования шаблона:
SQL-запрос после преобразования шаблона:
SQL-запрос после преобразования шаблона:
Некоторые возможности API
Применение метода queryArguments() - аргументы передаются в виде массива. Это второй, после метода query(), метод запросов в базу:
Вставить запись, получить последнее значение автоинкрементного поля и количество задействованных рядов:
В большинстве веб-проектов разработка структуры базы данных (таблицы, связи между ними) а также написание необходимых запросов является одним из важнейших этапов. Для удобства используются различные системы проектирования баз данных. В этой статье будет рассмотрено 3-и системы, описаны их возможности, выпилено сравнение и произведен анализ использования для различных типов задач.
Сравниваться будут:MySQL Workbench
Официальная система, как для проектирования, так и для администрирования баз данных MySQL. Удобный графический интерфейс позволяет легко создавать структуру базы любой сложности, а наглядность позволит легко ориентироваться.
Проектирование баз данных
- Наглядность
- Простота редактирования
- Разработка не требует подключения к серверу
- Недостаточно развит буфер обмена
- Запросы необходимо писать самому, отсутствует конструктор запросов
Администрирование баз данных
Ar-wik Builder
Онлайн сервис для разработки структуры баз данных и для работы по созданию запросов с использованием конструкторов. Как и в случае с предыдущим инструментом, графический интерфейс позволяет легко манипулировать таблицами, их полями и связями между ними. Также этот сервис позволяет внедрять PHP код непосредственно в запросы, не заботясь о необходимости проверки данных. Все проверки выполняются автоматически.
Проектирование баз данных
- Наглядность
- Простота редактирования
- Разработка не требует подключения к серверу
- Удобный конструктор запросов, с возможностью внедрения PHP функций
- Удобный импорт/экспорт проекта и его частей
- Возможность обмена проектами с другими пользователями сервиса
- Хранимые процедуры и триггеры необходимо писать разработчику, для них конструкторы не предусмотрены
Администрирование баз данных
phpMyAdmin
Бесплатный инструмент, как по мне, создан для непосредственного администрирования. Позволяет выполнять не сложные запросы без их написания. Удобно использовать когда удаленный доступ к базе запрещен например хостером, ведь он запускается на сервере.
Проектирование баз данных
Использовать этот сервис для проектирования базы очень неудобно, он с самого начала создавался не для этого.
Администрирование баз данных
- Возможность запускать непосредственно на сервере, что удобно при хостинге и когда хостер запрещает удаленный доступ к базе
Следует отметить, что использование подобных сервисов позволяет значительно увеличить скорость разработки, а выбор уже личное дело каждого. Главное есть с чего.
Многие компании создают различные многофункциональные приложения для облегчения управления, разработки и администрирования баз данных.
Большинство реляционных баз данных, за исключением MS Access, состоят из двух отдельных компонентов: «back-end», где хранятся данные и «front-end» — пользовательский интерфейс для взаимодействия с данными. Этот тип конструкции достаточно умный, так как он распараллеливает двухуровневую модель программирования, которая отделяет слой данных от пользовательского интерфейса и позволяет сконцентрировать рынок ПО непосредственно на улучшении своих продуктов. Эта модель открывает двери для третьих сторон, которые создают свои приложения для взаимодействия с различными базами данных.
В Интернете каждый может найти много продуктов для разработки и администрирования баз данных MySQL. Мы решили собрать 10 самых популярных инструментов в одной статье, чтобы вы смогли сэкономить свое время.
1. Workbench
Первое место, по праву принадлежит инструменту Workbench (разработка компании Sun Systems/Oracle), который может работать на платформах Microsoft Windows, Mac OS X и Linux. Workbench объединяет в себе разработку и администрирование баз данных и является преемником DBDesigner4.
MySQL Workbench распространяется под свободной лицензией — Community Edition и с ежегодной оплачиваемой подпиской — Standard Edition. Последняя включает в себя дополнительные возможности, которые способны существенно улучшить производительность, как разработчиков, так и администраторов баз данных.
Что делает Workbench популярным?
- возможность представить модель БД в графическом виде, а также редактирование данных в таблице;
- наличие простого и функционального механизма по созданию связей между полями таблиц, среди которых реализована связь «многие-ко-многим» с возможностью создания таблицы связей;
- функция Reverse Engineering позволяет восстанавливать структуру таблиц и связей из той, которая была реализована ранее и хранится на сервере БД;
- наличие редактора SQL-запросов, который дает возможность при отправке на сервер получать ответ в табличном виде и другие возможности.
2. Navicat
Второе место занимает Navicat (разработка компании PremiumSoft CyberTech Ltd) — инструмент для разработки и администрирования баз данных, который работает на любом сервере MySQL, начиная с версии 3.21. Для MySQL, Navicat доступен для работы на платформах Microsoft Windows, Mac OS X и Linux.
Стоимость продукта варьируется от 199 до 379 долл. США.
Что делает Navicat популярным?
3. PHPMyAdmin
PHPMyAdmin — бесплатное приложение с открытым кодом, предназначенное для администрирования СУБД MySQL. PHPMyAdmin представляет собой веб-интерфейс с помощью которого можно администрировать сервер MySQL, запускать команды и просматривать содержимое таблиц и БД через браузер.
Что делает PHPMyAdmin популярным?
- возможность управлять СУБД MySQL без непосредственного ввода SQL команд;
- как панель управления PHPMyAdmin предоставляет возможность администрирования выделенных БД;
- интенсивное развитие;
- возможность интегрировать PHPMyAdmin в собственные разработки благодаря лицензии GNU General Public License и другие возможности.
4. dbForge Studio for MySQL
dbForge Studio for MySQL — инструмент, представляющий интерес как для пользователей MySQL, так и для разработчиков БД. С его помощью вы сумеете легко автоматизировать рутинную работу и сэкономить время. Сегодня dbForge Studio for MySQL представлен в трех редакциях: Express, Standard и Professional, что позволяет выбрать тот инструмент, который нужен именно вам. Пользоваться dbForge Studio for MySQL можно как коммерческой, так и бесплатной версией.
Существует как бесплатная, так и платная версии, цена последней составляет 49,95 долл. США (стандартное издание ) и 99,99 долл. США (профессиональное издание).
Что делает dbForge Studio популярным?
- наличие средств для централизованного администрирования;
- инструменты для сравнения БД;
- визуальный профилировщик запросов;
- возможность управлять привилегиями пользователей;
- наличие Дизайнера БД, который позволяет строить визуальные диаграммы;
- улучшенная работа с проектами БД и другие возможности.
5. HeidiSQL
HeidiSQL — бесплатный инструмент для управления базами данных. Достойная альтернатива PHPMyAdmin, которая позволяет создавать и редактировать таблицы, представления, триггеры, процедура, а также просматривать и редактировать данные. Также HeidiSQL предоставляет возможность экспорта данных как в SQL файл, так и в буфер обмена на других серверах.
Что делает HeidiSQL популярным?
- возможность подключаться к серверу с помощью командной строки;
- возможность пакетной оптимизации и восстановления таблиц;
- возможность редактирования столбцов, индексов и внешних ключей таблиц, редактирование тела и параметров SQL процедур, триггеров и др.;
- простое форматирование неупорядоченных SQL;
- синхронизация таблицы между разными базами данных и другие возможности.
6. SQL Maestro для MySQL
SQL Maestro для MySQL — инструмент для администрирования, разработки и управления наиболее востребованных СУБД. Удобный графический интерфейс дает возможность выполнять SQL запросы и скрипты, управлять привилегиями пользователей, экспортировать и создавать резервные копии данных.
В зависимости от выбранной лицензии и варианта использования, стоимость данного инструмента варьируется от 99 до 1949 долл. США.
Что делает SQL Maestro для MySQL популярным?
7. EMS SQL Manager для MySQL
EMS SQL Manager для MySQL — инструмент для разработки и администрирования баз данных, который поддерживает различные функции MySQL и работает со всеми версиями MySQL старше 3.23. С его помощью у вас есть возможность визуально редактировать, импортировать и экспортировать БД, выполнять сценарии SQL, управлять привилегиями пользователей, визуально проектировать базы данных MySQL.
Существует платная и бесплатная версии приложения. Последняя имеет ряд функциональных ограничений. Стоимость платной версии варьируется в пределах 95 – 245 долл. США.
Что делает EMS SQL Manager for MySQLпопулярным?
8. SQLyog
SQLyog — один из наиболее мощных инструментов, который сочетает в себе возможности MySQL Administrator, PHPMyAdmin и некоторые другие инструменты для администрирования и разработки баз данных. SQLyog работает на платформах Microsoft Windows, Windows NT. и Linux с помощью Wine.
Доступна как бесплатная, так и платная версия SQLyog. Стоимость платной версии — от 99 до 1499 долл. США (варьируется в зависимости от количества пользователей и лицензии, с поддержкой или без нее).
Что делает SQLyog популярным?
9. DBTools Manager
DBTools Manager — приложение для управления данными, с встроенной поддержкой MySQL, PostgreSQL, MSAccess, MSSQL Server, Oracle и других БД. Поддерживаемые платформы: Windows 2000, XP, Vista, 7.
DBTools Manager представлен в бесплатном (Standard) и платном варианте (Enterprise). Стоимость составляет 69.90 долл. США за одну лицензию, при покупке нескольких лицензий предусмотрены скидки.
Что делает DBTools Manager популярным?
- управление базами данных, таблицами;
- наличие редактора запросов;
- наличие мастера создания форм и отчетов;
- возможность импорта и экспорта данных из различных источников, среди которых MSAccess, MSExcel, Paradox, FoxPro, DBF, ODBC таблицы, текстовые и XML файлы;
- конструктор диаграмм и другие возможности.
10. MyDB Studio
MyDB Studio — бесплатный инструмент для администрирования БД MySQL, который позволяет создавать, редактировать и удалять записи, таблицы и базы данных. Работает исключительно на платформе Windows.
Minimum starting qualifications — you can train your sysadmin, tester, vendor, product, engineer, lawyer or financier, and sometimes even your driver, to develop on Totum!
Universal UI, logic based on simple codes, automatic actions, access rights, logging, API and a lot more 👍
-->For fast construction of business applications by non-programmers 💪 👀
— Totum — a mixture of database and spreadsheet.
— The ready-made frontend — for desktops and mobile devices.
— Small-code — simple syntax that is easy to learn.
— Documentation and training course — first working table in 30 min.
— WEB, open-source — can be installed on your server.
— Two-level access — developer-users.
— API — integrate with anything.
Totum is not a ready-made solution — it is a set of cubes from which you can assemble absolutely different solutions for the task.
It is necessary and effective when there are no ready-made variants for your requirements on the market.
Alex P. Totum-developer
Use Totum for end products or prototyping 🏃 💨
Usage areas
One constructor — many variants of usage
Collect data ⟹ Process ⟹ Perform actions ⟹ Integrate ⟹ Create reports
- Production management
- Cadastral records
- Collecting sensor data
- Financial accounting
- Order management
- Stocks
- Backends for an online shop
- Accounting for services
- CRM
- Contract deliveries
- Fitness management
- Rental accounting
- Equipment inventory
- Transferring accounting from Excel
- Purchase optimization
- Graphic arts manufacturing
- Prototyping
- .
Look at the projects people have completed — in this section of the GitHub forum 🙌
Combine ready-made blocks
Charts based on chart.js.
You can customize the data displayed and the view.
Combined displays with two different Y-axes are possible.
The most universal field.
Stores a string value of any length.
When comparing Lines as numbers are compared to numbers as numbers.
Stores an integer or decimal number up to 10 decimal places.
Can use the automatic unit of measure and customisable delimiters for thousandths and decimals for display.
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
- Универсальность — Благодаря тому, что DataBase основана на модуле PHP-PDO , её можно использовать с различными БД.
- Простота — DataBase включает в себя удобные заполнители, которы серьёзно упрощают работу с SQL запросами. Также частые SQL запросы уже составлены и вынесены в виде методов.
- При использовании Заполнителей, вы полностью защищены от SQL инъекций .
В библиотеке поддерживается:
- Все методы PHP-PDO
- Свои заполнители
- ORM конструкции
Вот так будет происходить подключение, если ваш бот находится в той же папке, что и папка DataBase-master
Подключение к СуБД
Синтаксис конструктора базового класса такой же, как и у PHP-PDO
Пример подключения к MySQL
Пример подключение к SQLite
Что такое заполнители?
Заполнители — специальные типизированные маркеры, которые пишутся в строке SQL запроса вместо явных значений (параметров запроса), чем упрощают читаемость кода и защищают от SQL инъекций.
Заполнители поддерживаются в следующих методах:О том как работают эти методы можно посмотреть в PHP-PDO.
Параметры SQL-запроса, прошедшие через заполнители, обрабатываются специальными функциями экранирования, в зависимости от типа заполнителей. Т.е. вам теперь нет необходимости заключать переменные в функции экранирования типа quote() или приводить их к числовому типу, как это было раньше
Типы заполнителей и типы параметров SQL-запроса
Типы заполнителей и их предназначение описываются ниже. Прежде чем знакомиться с типами заполнителей, необходимо понять как работает механизм библиотеки DataBase.
SQL-запрос после преобразования шаблона:
В процессе исполнения этой команды библиотека проверяет, является ли аргумент 123 целочисленным значением. Заполнитель ?i представляет собой символ ? (знак вопроса) и первую букву слова integer . Если аргумент действительно представляет собой целочисленный тип данных, то в шаблоне SQL-запроса заполнитель ?i заменяется на значение 123 и SQL передается на исполнение.
Поскольку PHP слаботипизированный язык, то вышеописанное выражение эквивалентно нижеописанному:
SQL-запрос после преобразования шаблона:
Т.е. числа (целые и с плавающей точкой) представленные как в своем типе, так и в виде string — равнозначны с точки зрения библиотеки.
Приведение к типу заполнителя
SQL-запрос после преобразования шаблона:
В данном примере заполнитель целочисленного типа данных ожидает значение типа integer , а передается double .
Допускаются следующие преобразования:
- К типу int (заполнитель ?i ) приводятся:
- Числа с плавающей точкой, представленные как string или double
- bool(true) преобразуется в int(1)
- bool(false) и null преобразуется в int(0)
- Целые числа, представленные как string или int
- bool(true) преобразуется в float(1)
- bool(false) и null преобразуется в float(0)
- numeric преобразуется в string
- null преобразуется в string(0) ""
- bool(true) преобразуется в string(1) "1"
- bool(false) преобразуется в string(1) "0"
Это поведение отличается от приведения типа bool к int в PHP, т.к. зачастую на практике bool записывается в MySql именно как число.
Для того, что-бы IDE нормально реагировала на заполнители, и не подсвечивала места с заполнителями ошибками, необходимо добавить заполнители в список пользовательских параметров.
Путь диалогового окна с настройками
File >> Settings. >> Tools >> Database >> User Parameters
Затем в окошке "Parameter patterns" нужно добавить следующие 2 шаблона и поставить обе галочки "In scripts" и "In literals":
Окно настройки должно выглядеть следующим образом
Типы заполнителей DataBase
?i — заполнитель целого числа
SQL-запрос после преобразования шаблона:
- Оперируйте ими исключительно как строками в своих программах.
- Не используйте данный заполнитель, используйте заполнитель строки ?s (см. ниже). Дело в том, что числа, выходящие за пределы PHP_INT_MAX , PHP интерпретирует как числа с плавающей точкой. Парсер библиотеки постарается преобразовать параметр к типу int, в итоге:
?d — заполнитель числа с плавающей точкой
ВНИМАНИЕ! Если вы используете библиотеку для работы с типом данных double , установите соответствующую локаль, что бы разделитель целой и дробной части был одинаков как на уровне PHP, так и на уровне СУБД.
?s — заполнитель строкового типа
Значения экранируются с помощью функции PDO::quote()
SQL-запрос после преобразования шаблона:
?S — заполнитель строкового типа для подстановки в SQL-оператор LIKE
Значения экранируются с помощью функции PDO::quote() + экранирование спецсимволов, используемых в операторе LIKE ( % и _ ):
SQL-запрос после преобразования шаблона:
?n — заполнитель NULL типа
Заполнитель просто вставляет NULL в запрос, входной параметр не нужен
SQL-запрос после преобразования шаблона:
?f — заполнитель имени таблицы или поля
Данный заполнитель предназначен для случаев, когда имя таблицы или поля передается в запросе через параметр. Значение обрамляется символом апостроф:
SQL-запрос после преобразования шаблона:
?A* — заполнитель ассоциативного множества из ассоциативного массива, генерирующий последовательность пар ключ = значение
Пример: "key_1" = "val_1", "key_2" = "val_2", . "key_N" = "val_N"
Ключи экранируются заполнителем ?fгде * после заполнителя — один из типов:
- i (заполнитель целого числа)
- d (заполнитель числа с плавающей точкой)
- s (заполнитель строкового типа)
- f (заполнитель имени таблицы или поля)
Правила преобразования и экранирования такие же, как и для одиночных скалярных типов, описанных выше.
SQL-запрос после преобразования шаблона:
?A[?n, ?s, ?i, ?d, . ] — заполнитель ассоциативного множества с явным указанием типа и количества аргументов, генерирующий последовательность пар ключ = значение
Пример: "key_1" = "val_1", "key_2" => "val_2", . "key_N" = "val_N"
SQL-запрос после преобразования шаблона:
?a* — заполнитель множества из простого (или также ассоциативного) массива, генерирующий последовательность значений
Пример: "val_1", "val_2", . "val_N"
где * после заполнителя — один из типов:
- i (заполнитель целого числа)
- d (заполнитель числа с плавающей точкой)
- s (заполнитель строкового типа)
- f (заполнитель имени таблицы или поля)
правила преобразования и экранирования такие же, как и для одиночных скалярных типов, описанных выше.
SQL-запрос после преобразования шаблона:
?a[?n, ?s, ?i, ?d, . ] — заполнитель множества с явным указанием типа и количества аргументов, генерирующий последовательность значений
Пример: "val_1", "val_2", . "val_N"
SQL-запрос после преобразования шаблона:
?v* — заполнитель VALUES из простого (или также ассоциативного) двумерного массива, генерирующий последовательность значений для заполнения VALUES
Пример: ("val_1", "val_2", . "val_N"), ("val_1", "val_2", . "val_N"), .
где * после заполнителя — один из типов:
- i (заполнитель целого числа)
- d (заполнитель числа с плавающей точкой)
- s (заполнитель строкового типа)
- f (заполнитель имени таблицы или поля)
правила преобразования и экранирования такие же, как и для одиночных скалярных типов, описанных выше.
SQL-запрос после преобразования шаблона:
?v[?n, ?s, ?i, ?d, . ] — заполнитель множества из двумерного массива с явным указанием типа и количества аргументов, генерирующий последовательность значений для заполнения VALUES
Пример: ("val_1", "val_2", . "val_N"), ("val_1", "val_2", . "val_N"), .
SQL-запрос после преобразования шаблона:
?w* — заполнитель ассоциативного множества из ассоциативного массива, генерирующий последовательность пар ключ = значение с разделителем AND
Пример: "key_1" = "val_1" AND "key_2" = "val_2" AND . AND "key_N" = "val_N"
Ключи экранируются заполнителем ?f
где * после заполнителя — один из типов:
- i (заполнитель целого числа)
- d (заполнитель числа с плавающей точкой)
- s (заполнитель строкового типа)
- f (заполнитель имени таблицы или поля)
Правила преобразования и экранирования такие же, как и для одиночных скалярных типов, описанных выше.
SQL-запрос после преобразования шаблона:
?w[?n, ?s, ?i, ?d, . ] — заполнитель ассоциативного множества с явным указанием типа и количества аргументов, генерирующий последовательность пар ключ = значение с разделителем AND
Пример: "key_1" = "val_1" AND "key_2" => "val_2" AND . AND "key_N" = "val_N"
SQL-запрос после преобразования шаблона:
Примеры для понимания сути заполнителей
Различные варианты INSERT:
Простая вставка данных через заполнители разных типов:
SQL-запрос после преобразования шаблона:
Вставка значений через заполнитель ассоциативного множества типа string:
SQL-запрос после преобразования шаблона:
Вставка значений через заполнитель ассоциативного множества с явным указанием типа и количества аргументов:
SQL-запрос после преобразования шаблона:
Различные варианты SELECT
Укажем некорректный числовой параметр - значение типа double:
SQL-запрос после преобразования шаблона:
SQL-запрос после преобразования шаблона:
Имя базы данных, таблицы и поля передаются также, как и аргументы запроса
SQL-запрос после преобразования шаблона:
В библиотеке есть несколько методов ORM. Заполнители встроены дополнительным 2-ым параметром, остальные параметры методов сдвинуты. Методы с поддержкой заполнителей:
getQueryString() : sql (string)
Метод возвращает последний собранный запрос, в котором были заполнители
rows($sql, $args = [], $fetchMode = PDO::FETCH_ASSOC) : array | false
Соберёт $sql запрос по заполнителям из $args и вернёт все строки (вызов PDOStatement::fetchAll ) с режимом выборки $fetchMode .
row($sql, $args = [], $fetchMode = PDO::FETCH_ASSOC) : array | false
Соберёт $sql запрос по заполнителям из $args и вернёт строку (вызов PDOStatement::fetch ) с режимом выборки $fetchMode .
getById($table, $id, $fetchMode = PDO::FETCH_ASSOC) : array | false
Вернёт строку (вызов PDOStatement::fetch ) с режимом выборки $fetchMode из таблицы $table ро правилу, описанному ниже.
Если $id - число, то вернёт запись, где id = $id
Если $id - массив, то вернёт запись по WHERE, где ключи массив - названия полей, значения массива - значения полей
count($sql, $args = []) : int | false
Соберёт $sql запрос по заполнителям из $args и вернёт количество затронутых строк (вызов метода PDOStatement::rowCount )
insert($table, $data) : int | false
Вставит в таблицу $table значения из массива $data , в котором ключи - названия полей, значения - значения полей. Вернёт id добавленной записи
update($table, $data, $where = []) : int | false
Изменить таблицу $table значениями из массива $data , в котором ключи - названия полей, значения - значения полей, где по $where , в котором ключи - названия полей, значения - значения полей. Вернёт количество затронутых строк или false в случае ошибки.
Внимание! Если функция отработала без ошибок, но затронула 0 строк - она вернёт 0 . Что при нестрогой проверке приведётся к false
Если не передан $where , то будут затронуты все строки
delete($table, $where, $limit = -1) : int | false
Удалить из таблицы $table $limit записей, где по $where , в котором ключи - названия полей, значения - значения полей. Вернёт количество затронутых строк или false в случае ошибки.
Внимание! Если функция отработала без ошибок, но затронула 0 строк - она вернёт 0 . Что при нестрогой проверке приведётся к false
Если не передан $limit или равен -1 , то будут удален все выбранные записи
deleteAll($table) : int | false
Удалить из таблицы $table все записи. Вернёт количество затронутых строк или false в случае ошибки.
Внимание! Если функция отработала без ошибок, но затронула 0 строк - она вернёт 0 . Что при нестрогой проверке приведётся к false
deleteById($table, $id) : int | false
Удалить из таблицы $table записи с id = $id . Вернёт количество затронутых строк или false в случае ошибки.
Внимание! Если функция отработала без ошибок, но затронула 0 строк - она вернёт 0 . Что при нестрогой проверке приведётся к false
deleteByIds($table, $column, $ids) : int | false
Удалить из таблицы $table записи, где $column равен одному из $ids . Вернёт количество затронутых строк или false в случае ошибки.
$ids должен быть обычным или ассоциативным массивом.
Внимание! Если функция отработала без ошибок, но затронула 0 строк - она вернёт 0 . Что при нестрогой проверке приведётся к false
truncate($table) : int | false
Очищает таблицу $table . Вернёт количество затронутых строк или false в случае ошибки.
Сбрасываются также внутренние счётчики таблицы
Внимание! Если функция отработала без ошибок, но затронула 0 строк - она вернёт 0 . Что при нестрогой проверке приведётся к false
About
Библиотека-обертка над стандартным PDO PHP для простой, удобной работы с различными базами данных и с защитой от SQL инъекций
Читайте также:
- Что бы предотвратить SQL-инъекции, у разработчиков есть два пути: