BMC IO DocsBMC IO Docs
IO v6
IO v7
Notes
Docs
IO v6
IO v7
Notes
Docs
  • IO Framework v6

    • О фреймворке
    • Уроки
    • Структура
    • Доступ к участкам проекта
    • Старые версии фреймворка
    • Разворачивание нового проекта
  • Backend

    • Функции фреймворка
    • Настройки проекта (app/i.php)
    • Настройки composer
    • Глобальные переменные
    • Константы фреймворка
    • Event класс
    • IOCore класс
    • Controller и работа с ними
    • Class и работа с ними
    • Model и работа с ними
    • View и работа с ними
    • Мультиязычность и словарь фраз
    • Bin скрипты и работа с ними
    • Cron скрипты и работа с ними
    • $ioSession и работа с сессией
    • $ioSession->user и работа с пользователем
    • $ioHash и работа с кешем
    • $ioXCache и работа с кешем
    • $iodb и работа с базой данных
  • Frontend

    • Twig шаблонизатор и работа с ним
    • Twig функции
    • Twig фильтры
    • JS плагины
    • Отложенная загрузка JS скриптов
    • Обращение к Model через JS
  • Примеры

    • AutoIncrement, зависящий от полей

IO v6. $iodb и работа с базой данных

  • Описание
  • Переменные
    • db_link
    • last_query_all
    • last_query
    • db_connections
    • server
    • user
    • pass
    • db
    • lastconnect
    • log_query
    • code_page
    • time_zone
    • log_class_exists
    • quiet
    • _errorstr
    • _errorno
    • _info_loop_query
    • _time_query_max
    • columns
  • Методы
    • information_schema_load_current_db()
    • tryconnect()
    • connect()
    • create_conn()
    • is_valid()
    • ping()
    • usedb()
    • query()
    • query_objects()
    • query_params()
    • connected()
    • free_result()
    • fetch_assoc()
    • error()
    • errorstr()
    • num_rows()
    • last_insert_id()
    • get_count()
    • escape()
    • escape2()
    • getWhereFromFilter()
    • insert()
    • insert_or_update()
    • insert_or_ignore()
    • update()
    • delete()
    • affected_rows()
    • found_rows()
    • search()
    • beginTransaction()
    • commit()
    • rollBack()

Описание

$iodb - глобальная переменная-объект для обращения к базе данных MySQL. Также, с ее помощью можно писать запросы в базу данных на языке SQL.

Переменная является экземпляром класса IO_MYSQL_PDO (project/app/io/mysql_pdo.php) (ранее IO_MYSQLI (project/app/io/mysqli.php) и еще ранее IO_MYSQL (project/app/io/mysql.php)).

Переменные

db_link

Объект соединения базы данных либо false.

object|bool $db_link = false

last_query_all

static string $last_query_all = ''

last_query

string $last_query = ''

db_connections

Массив соединений базы данных.

static array $db_connections = []

server

Адрес сервера базы данных.

string $server = ''

user

Имя пользователя базы данных.

string $user = ''

pass

Пароль пользователя базы данных.

string $pass = ''

db

Название базы данных.

string $db = ''

lastconnect

int $lastconnect = 1

log_query

Выводить лог запросов.

int $log_query = 0

code_page

Кодировка.

string $code_page = 'utf8'

time_zone

Временная зона (timezone).

string $time_zone = '+05:00'

log_class_exists

int $log_class_exists = -1

quiet

int $quiet = 0

_errorstr

Текст последней ошибки.

string $_errorstr = ''

_errorno

Номер последней ошибки.

string $_errorno = ''

_info_loop_query

int $_info_loop_query = 0

_time_query_max

int $_time_query_max = 2000

columns

array $columns = []

Методы

information_schema_load_current_db()

Выполняет SQL запрос "select * from information_schema.COLUMNS where TABLE_SCHEMA='".$this->db."';" и заполняет массив columns.

information_schema_load_current_db(): void

Пример:

global $iodb;
$iodb->information_schema_load_current_db();

tryconnect()

Создает соединение с базой данных MySQL, выбирает базу данных проекта, а также устанавливает кодировку и timezone. Вызывается при инициализации проекта.

tryconnect(): bool

Пример:

global $iodb;
$ret = $iodb->tryconnect();

connect()

Создает соединение с базой данных MySQL по указанным параметрам.

Применяется в том числе в функции tryconnect().

connect(string $server, string $user, string $pass, string|null $db = null): bool
Аргумент функцииТипОписаниеЗначение по умолчаниюОбязательный
$serverstringАдрес сервера БД.Да
$userstringИмя пользователя БД.Да
$passstringПароль пользователя БД.Да
$dbstring|nullНазвание базы данных.nullНет

Пример:

global $iodb;
$ret = $iodb->connect('server', 'username', 'password', 'trade');

create_conn()

Возвращает новый экземпляр класса IO_MYSQL_PDO.

static create_conn(string $server, string $user, string $pass, string $db = ''): object(IO_MYSQL_PDO)
Аргумент функцииТипОписаниеЗначение по умолчаниюОбязательный
$serverstringАдрес сервера БД.Да
$userstringИмя пользователя БД.Да
$passstringПароль пользователя БД.Да
$dbstringНазвание базы данных.''Нет

Пример:

$dbObj = IO_MYSQL_PDO::create_conn('server', 'username', 'password', 'trade');

is_valid()

Проверяет, является ли переменная соединения ресурсом, т.е. проверяет на наличие соединения с базой данных.

is_valid(): bool

Пример:

global $iodb;
$ret = $iodb->is_valid();

ping()

Проверяет, переменная соединения не пустая ли, и если нет, то пытается выполнить простой SQL запрос select, т.е. проверяет на наличие соединения с базой данных.

ping(): bool

Пример:

global $iodb;
$ret = $iodb->ping();

usedb()

Переключение на указанную базу данных.

usedb(string $dbname): void
Аргумент функцииТипОписаниеОбязательный
$dbnamestringНазвание базы данных.Да

Пример:

global $iodb;
$iodb->usedb('trade');

ВНИМАНИЕ

Используется в самых крайних случаях. На постоянной основе использовать не рекомендуется.

query()

Отправка SQL запроса в БД.

query(string $query = '', int $save = 1): object(query_result)|false
Аргумент функцииТипОписаниеЗначение по умолчаниюОбязательный
$querystringSQL запрос.''Да
$saveint???1Нет

Пример:

global $iodb;
$q = "
    SELECT *
    FROM `iodb`.`countries`
    WHERE `countryCode` = 'KZ';
";
$r = $iodb->query($q);
while($row = $iodb->fetch_assoc($r))
{
    v_dump($row);
}

query_objects()

Отправка SQL запроса с расшифровкой его результата и преобразования каждой записи в экземпляр указанного класса.

query_objects(string $q, string $class = 'BmcObject', string|null $tablename = null): array
Аргумент функцииТипОписаниеЗначение по умолчаниюОбязательный
$qstringSQL запрос.Да
$classstringНазвание класса, под экземпляром которого будет возвращен список объектов.'BmcObject'Да
$tablenamestring|null???nullНет

ВНИМАНИЕ

Данная функция долгое время не применялась на практике. Работает ли она сейчас корректно, неизвестно...

query_params()

Отправка SQL запроса с возможностью указания для него параметров в виде массива.

query_params(string $query = '', array|null $arr = null): object(query_result)
Аргумент функцииТипОписаниеЗначение по умолчаниюОбязательный
$querystringSQL запрос.''Да
$arrarray|nullПараметры для SQL запросаnullНет

Пример:

global $iodb;
$r = $iodb->query_params(
    'SELECT * FROM `users` WHERE `login` like :login',
    [
        ":login" => '%exinz%',
    ]
);
while($row = $iodb->fetch_assoc($r))
{
    v_dump($row);
}

connected()

Возвращает, есть ли соединение с БД.

connected(): bool

Пример:

global $iodb;
$connected = $iodb->connected(); // true

free_result()

Закрывает курсор, переводя запрос в состояние готовности к повторному запуску.

free_result(object $result): bool
Аргумент функцииТипОписаниеОбязательный
$resultobjectРезультат SQL запроса (query_result).Да

fetch_assoc()

Расшифровка результата запроса (query_result) в ассоциативный массив.

fetch_assoc(object $result): array|false
Аргумент функцииТипОписаниеОбязательный
$resultobject(query_result)Результат SQL запроса.Да

Пример:

global $iodb;
$q = "
    SELECT *
    FROM `iodb`.`countries`
    WHERE `countryCode` = 'KZ';
";
$r = $iodb->query($q);
while($row = $iodb->fetch_assoc($r))
{
    v_dump($row);
}

error()

Вывод номера (кода) ошиюки, возникшей в последнем запросе.

Содержит в себе значение первого элемента массива из результата выполнения функции PDO::errorInfo().

error(): string

Пример:

global $iodb;
$iodb->query('bogus sql');
echo $iodb->error(); // HY000

errorstr()

Вывод номера (кода), а также текста ошибки, возникшей в последнем запросе.

Содержит в себе значение первого и третьего элементов массива из результата выполнения функции PDO::errorInfo().

errorstr(): string

Пример:

global $iodb;
$iodb->query('bogus sql');
echo $iodb->errorstr(); // [HY000]: near "bogus": syntax error

num_rows()

Возвращает количество строк, затронутых в указанном результате запроса.

num_rows(object $res): int
Аргумент функцииТипОписаниеОбязательный
$resobject(query_result)Результат SQL запроса.Да

Пример:

global $iodb;
$result = $iodb->query('SELECT * FROM users');
echo $iodb->num_rows($result); // 155

last_insert_id()

Возвращает ID последней вставленной строки или значение последовательности.

last_insert_id(): int|null

Пример:

global $iodb;
echo $iodb->last_insert_id();

get_count()

get_count(string $q, string $field = 'count'): mixed
Аргумент функцииТипОписаниеЗначение по умолчаниюОбязательный
$qstringТекст SQL запроса.Да
$fieldstringНазвание поля, значения которого нужно получить.'count'Нет

ВНИМАНИЕ

Данная функция долгое время не применялась на практике. Работает ли она сейчас корректно, неизвестно...

escape()

Экранирует специальные символы в указанной строке, перед вставкой в SQL-запрос. Вспомогательная функция класса.

static escape(): string

Пример:

$msg = "Hello 'world'\nNew line \x1a End.";
echo IO_MYSQL_PDO::escape($msg); // Hello \'world\'\nNew line \\Z End.

ВНИМАНИЕ

Эта функция небезопасна для защиты от SQL-инъекций. Вместо этой функции лучше использовать встроенные функции PHP: PDO::quote($msg).

escape2()

Приводит в порядок имена таблиц и полей для использования в запросе. Вспомогательная функция класса.

static escape2(string $field): string
Аргумент функцииТипОписаниеОбязательный
$fiendstring???Да

Пример:

echo IO_MYSQL_PDO::escape2('iodb');

getWhereFromFilter()

Генератор SQL параметра where на основе фильтра фреймворка (как в dbsearch2 у class). Вспомогательная функция.

static getWhereFromFilter(array|null $filter = null): string
Аргумент функцииТипОписаниеОбязательный
$filterarray|nullМассив параметров фильтра.Да

Пример:

global $iodb;
$where = IO_MYSQL_PDO::getWhereFromFilter([
    '!=pkid' => [1, 2, 5],
    '%text' => 'elcom',
]);

insert()

Добавление записи в БД.

insert(string $table, array $data, array|null $data2 = null): int(1|-1)
Аргумент функцииТипОписаниеЗначение по умолчаниюОбязательный
$tablestringНазвание таблицы в БД.Да
$dataarrayМассив полей и их значений для добавления в БД.Да
$data2array|null???nullНет

Пример:

global $iodb;
$iodb->insert('users', [
    'login' => 'famio',
    'sname' => 'Фамилиев',
    'fname' => 'Имий',
    'lname' => 'Отчествович',
    'email' => 'famio@mail.site',
]);

insert_or_update()

В случае отсутствия записи в БД - добавление, иначе изменение.

insert_or_update(string $table, array $data, array|null $data2 = null): int(1|-1)
Аргумент функцииТипОписаниеЗначение по умолчаниюОбязательный
$tablestringНазвание таблицы в БД.Да
$dataarrayМассив полей и их значений для добавления или изменения в БД.Да
$data2array|null???nullНет

Пример:

global $iodb;
$iodb->insert_or_update('users', [
    'login' => 'famio',
    'sname' => 'Фамилиев',
    'fname' => 'Имий',
    'lname' => 'Отчествович',
    'email' => 'famio@mail.site',
]);

insert_or_ignore()

В случае отсутствия записи в БД - добавление, иначе ничего не делать.

insert_or_ignore(string $table, array $data, array|null $data2 = null): int(1|-1)
Аргумент функцииТипОписаниеЗначение по умолчаниюОбязательный
$tablestringНазвание таблицы в БД.Да
$dataarrayМассив полей и их значений для добавления в БД.Да
$data2array|null???nullНет

Пример:

global $iodb;
$iodb->insert_or_ignore('users', [
    'login' => 'famio',
    'sname' => 'Фамилиев',
    'fname' => 'Имий',
    'lname' => 'Отчествович',
    'email' => 'famio@mail.site',
]);

update()

Изменение записей в БД.

update(string $table, array $filter, array $data, array|null $data2 = null): int(1|-1)
Аргумент функцииТипОписаниеЗначение по умолчаниюОбязательный
$tablestringНазвание таблицы в БД.Да
$filterarrayМассив параметров фильтра (как в dbsearch2 у class).Да
$dataarrayМассив полей и их значений для изменения в БД.Да
$data2array|null???nullНет

Пример:

global $iodb;
// сбросить поле email для тех, у кого email_confirm не равен 1
$iodb->update('users', [
    '!=email_confirm' => 1,
], [
    'email' => '',
]);

delete()

Удаление записей из БД.

delete(string $table, array $filter, int|null $count = null): int(1|-1)
Аргумент функцииТипОписаниеЗначение по умолчаниюОбязательный
$tablestringНазвание таблицы в БД.Да
$filterarrayМассив параметров фильтра (как в dbsearch2 у class).Да
$countint|nullПараметр, указывающий limit в запросе.nullНет

Пример:

global $iodb;
// удалить тех, у кого email_confirm не равен 1
$iodb->update('users', [
    '!=email_confirm' => 1,
]);

affected_rows()

Получение задействованных строк.

Выполняет SQL запрос SELECT ROW_COUNT() as rows и возвращает значение поля rows.

affected_rows(): mixed

Пример:

global $iodb;
$iodb->affected_rows();

found_rows()

Получение найденных строк.

Выполняет SQL запрос SELECT FOUND_ROWS() as rows и возвращает значение поля rows.

found_rows(): mixed

Пример:

global $iodb;
$iodb->found_rows();

search()

Поиск записей в БД.

search(
    string $table,
    array $filter,
    array|null $order = null,
    int|null $start = null,
    int|null $limit = null,
    array|null $join = null,
    array|null $fields = null,
    int|bool $type = 0,
    int|bool $calc_found_rows = 0,
    array|null $groupby = null,
    int|bool $distinct = 0
): array
Аргумент функцииТипОписаниеЗначение по умолчаниюОбязательный
$tablestringНазвание таблицы в БД.Да
$filterarrayМассив параметров фильтра (как в dbsearch2 у class).Да
$orderarray|nullМассив параметров порядка сортировки в формате "поле" => "asc|desc".nullНет
$startint|nullСмещение offset.nullНет
$limitint|nullОграничение количества записей limit.nullНет
$joinarray|nullМассив join.nullНет
$fieldsarray|nullМассив полей fields.nullНет
$typeint|boolВозвращать ли результат запроса (query_reqult) вместо ассоциативного массива.0Нет
$calc_found_rowsint|boolВыполнять ли принудительный запрос получения количества записей в запросе.0Нет
$groupbyarray|nullМассив группировки group by.nullНет
$distinctint|boolИсключать ли дубликаты.0Нет

Пример:

global $iodb;
$ret = $iodb->search('users', [
    '!=email_confirm' => 0,
], [
    'pkid' => 'asc',
    'ugmtimeAdd' => 'desc',
], 0, 0, [
    "inner join users_questionary on (users_questionary.user_pkid = users.pkid)",
], [
    "#users.login as user_login",
    "#users_questionary.birthday as user_birthday",
    "#users_questionary.about as user_about",
], 0, 0, [
    'user_login',
], true);

beginTransaction()

Запуск транзакции.

beginTransaction(): bool

Пример:

global $iodb;
$iodb->beginTransaction();
try
{
    $iodb->insert('users', [
        'login' => 'famio',
    ]);
    $iodb->commmit();
} catch(Exception $e)
{
    $iodb->rollBack();
}

commit()

Фиксация транзакции в случае успеха.

commit(): bool

Пример:

global $iodb;
$iodb->beginTransaction();
try
{
    $iodb->insert('users', [
        'login' => 'famio',
    ]);
    $iodb->commmit();
} catch(Exception $e)
{
    $iodb->rollBack();
}

rollBack()

Откат транзакции в случае неудачи.

rollBack(): bool

Пример:

global $iodb;
$iodb->beginTransaction();
try
{
    $iodb->insert('users', [
        'login' => 'famio',
    ]);
    $iodb->commmit();
} catch(Exception $e)
{
    $iodb->rollBack();
}
Prev
$ioXCache и работа с кешем