IO v7. $iodb и работа с базой данных
Описание
$iodb - глобальная переменная-объект для обращения к базе данных MySQL. Также, с ее помощью можно писать запросы в базу данных на языке SQL.
Переменная является экземпляром класса IO_MYSQL_PDO модуля IO7 (project/src/modules/io7/php/MYSQL_PDO.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
| Аргумент функции | Тип | Описание | Значение по умолчанию | Обязательный |
|---|---|---|---|---|
$server | string | Адрес сервера БД. | Да | |
$user | string | Имя пользователя БД. | Да | |
$pass | string | Пароль пользователя БД. | Да | |
$db | string|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)
| Аргумент функции | Тип | Описание | Значение по умолчанию | Обязательный |
|---|---|---|---|---|
$server | string | Адрес сервера БД. | Да | |
$user | string | Имя пользователя БД. | Да | |
$pass | string | Пароль пользователя БД. | Да | |
$db | string | Название базы данных. | '' | Нет |
Пример:
$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
| Аргумент функции | Тип | Описание | Обязательный |
|---|---|---|---|
$dbname | string | Название базы данных. | Да |
Пример:
global $iodb;
$iodb->usedb('trade');
ВНИМАНИЕ
Используется в самых крайних случаях. На постоянной основе использовать не рекомендуется.
query()
Отправка SQL запроса в БД.
query(string $query = '', array|null $arr = null, bool $save_log = true): object(query_result)|false
| Аргумент функции | Тип | Описание | Значение по умолчанию | Обязательный |
|---|---|---|---|---|
$query | string | SQL запрос. | '' | Да |
$query | array|null | ??? | null | Нет |
$save_log | bool | ??? | true | Нет |
Пример:
global $iodb;
$q = "
SELECT *
FROM `iodb`.`countries`
WHERE `countryCode` = 'KZ';
";
$r = $iodb->query($q);
while($row = $iodb->fetch($r))
{
v_dump($row);
}
query_params()
Отправка SQL запроса с возможностью указания для него параметров в виде массива.
query_params(string $query = '', array|null $arr = null, bool $save_log = true): object(query_result)
| Аргумент функции | Тип | Описание | Значение по умолчанию | Обязательный |
|---|---|---|---|---|
$query | string | SQL запрос. | '' | Да |
$arr | array|null | Параметры для SQL запроса | null | Нет |
$save_log | bool | ??? | true | Нет |
Пример:
global $iodb;
$r = $iodb->query_params(
'SELECT * FROM `users` WHERE `login` like :login',
[
":login" => '%exinz%',
]
);
while($row = $iodb->fetch($r))
{
v_dump($row);
}
connected()
Возвращает, есть ли соединение с БД.
connected(): bool
Пример:
global $iodb;
$connected = $iodb->connected(); // true
free_result()
Закрывает курсор, переводя запрос в состояние готовности к повторному запуску.
free_result(object $result): bool
| Аргумент функции | Тип | Описание | Обязательный |
|---|---|---|---|
$result | object | Результат SQL запроса (query_result). | Да |
fetch(), fetch_assoc()
Расшифровка результата запроса (query_result) в ассоциативный массив (один объект).
fetch(object $result): array|false
fetch_assoc(object $result): array|false
| Аргумент функции | Тип | Описание | Обязательный |
|---|---|---|---|
$result | object(query_result) | Результат SQL запроса. | Да |
Пример для множества записей:
global $iodb;
$q = "
SELECT *
FROM `iodb`.`countries`
WHERE `countryCode` = 'KZ';
";
$r = $iodb->query($q);
while($row = $iodb->fetch($r))
{
v_dump($row);
}
Пример для одной записи:
global $iodb;
$q = "
SELECT *
FROM `iodb`.`countries`
LIMIT 1;
";
$r = $iodb->query($q);
$row = $iodb->fetch($r);
v_dump($row);
fetchAll()
Расшифровка результата запроса (query_result) в ассоциативный массив (все записи запроса).
fetchAll(object $result): array|false
| Аргумент функции | Тип | Описание | Обязательный |
|---|---|---|---|
$result | object(query_result) | Результат SQL запроса. | Да |
Пример:
global $iodb;
$q = "
SELECT *
FROM `iodb`.`countries`
WHERE `countryCode` = 'KZ';
";
$r = $iodb->query($q);
$rows = $iodb->fetchAll($r);
foreach($rows as $row)
{
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
| Аргумент функции | Тип | Описание | Обязательный |
|---|---|---|---|
$res | object(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_var()
get_var(string $field, string $q, array $arr = []): mixed
| Аргумент функции | Тип | Описание | Значение по умолчанию | Обязательный |
|---|---|---|---|---|
$field | string | ??? | Да | |
$q | string | Текст SQL запроса. | Да | |
$arr | array | ??? | Нет |
get_count()
get_count(string $q, string $field = 'count'): mixed
| Аргумент функции | Тип | Описание | Значение по умолчанию | Обязательный |
|---|---|---|---|---|
$q | string | Текст SQL запроса. | Да | |
$field | string | Название поля, значения которого нужно получить. | 'count' | Нет |
escape()
Экранирует специальные символы в указанной строке, перед вставкой в SQL-запрос. Вспомогательная функция класса.
static escape(string $msg): string
| Аргумент функции | Тип | Описание | Обязательный |
|---|---|---|---|
$msg | string | Очищаемый текст. | Да |
Пример:
$msg = "Hello 'world'\nNew line \x1a End.";
echo IO_MYSQL_PDO::escape($msg); // Hello \'world\'\nNew line \\Z End.
escape2()
Приводит в порядок имена таблиц и полей для использования в запросе. Вспомогательная функция класса.
static escape2(string $field): string
| Аргумент функции | Тип | Описание | Обязательный |
|---|---|---|---|
$msg | string | Очищаемый текст. | Да |
Пример:
echo IO_MYSQL_PDO::escape2('iodb');
getWhereFromFilter()
Генератор SQL параметра where на основе фильтра фреймворка (как в dbsearch2 у class). Вспомогательная функция.
static getWhereFromFilter(array|null $filter = null): string
| Аргумент функции | Тип | Описание | Обязательный |
|---|---|---|---|
$filter | array|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)
| Аргумент функции | Тип | Описание | Значение по умолчанию | Обязательный |
|---|---|---|---|---|
$table | string | Название таблицы в БД. | Да | |
$data | array | Массив полей и их значений для добавления в БД. | Да | |
$data2 | array|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)
| Аргумент функции | Тип | Описание | Значение по умолчанию | Обязательный |
|---|---|---|---|---|
$table | string | Название таблицы в БД. | Да | |
$data | array | Массив полей и их значений для добавления или изменения в БД. | Да | |
$data2 | array|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)
| Аргумент функции | Тип | Описание | Значение по умолчанию | Обязательный |
|---|---|---|---|---|
$table | string | Название таблицы в БД. | Да | |
$data | array | Массив полей и их значений для добавления в БД. | Да | |
$data2 | array|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)
| Аргумент функции | Тип | Описание | Значение по умолчанию | Обязательный |
|---|---|---|---|---|
$table | string | Название таблицы в БД. | Да | |
$filter | array | Массив параметров фильтра (как в dbsearch2 у class). | Да | |
$data | array | Массив полей и их значений для изменения в БД. | Да | |
$data2 | array|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)
| Аргумент функции | Тип | Описание | Значение по умолчанию | Обязательный |
|---|---|---|---|---|
$table | string | Название таблицы в БД. | Да | |
$filter | array | Массив параметров фильтра (как в dbsearch2 у class). | Да | |
$count | int|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(), dbsearch2()
Поиск записей в БД.
search(string $table, array $params): array|object(query_result)
dbsearch2(string $table, array $params): array|object(query_result)
| Аргумент функции | Тип | Описание | Обязательный |
|---|---|---|---|
$table | string | Название таблицы в БД. | Да |
$params | array | Массив параметров. | Да |
Доступные параметры массива $params:
| Параметр | Тип | Описание | Значение по умолчанию |
|---|---|---|---|
'filter' | array | Массив параметров фильтра (как в dbsearch2 у class) | [] |
'start' | int | Смещение offset. | 0 |
'limit' | int|null | Ограничение количества записей limit. | null |
'join' | array|null | Массив join. | null |
'fields' | array|null | Массив полей fields. | null |
'groupby' | array|null | Массив группировки group by. | null |
'distinct' | bool | Исключать ли дубликаты. | 0 |
'calc_found_rows' | bool | Выполнять ли принудительный запрос получения количества записей в запросе. | 0 |
'order' | array|null | Массив параметров порядка сортировки в формате "поле" => "asc|desc". | null |
'out' | string | Тип возвращаемого результата запроса.
| 'object' |
Пример:
global $iodb;
$ret = $iodb->search('users', [
'filter' => [
'!=email_confirm' => 0,
],
'fields' => [
"#users.login as user_login",
"#users_questionary.birthday as user_birthday",
"#users_questionary.about as user_about",
],
'join' => [
"inner join users_questionary on (users_questionary.user_pkid = users.pkid)",
],
'order' => [
'pkid' => 'asc',
'ugmtimeAdd' => 'desc',
],
'groupby' => [
'user_login',
],
'distinct' => true,
'out' => 'array',
]);
sync_items()
Синхронизация элементов.
sync_items(string $table, array $params): void
| Аргумент функции | Тип | Описание | Обязательный |
|---|---|---|---|
$table | string | Название таблицы в БД. | Да |
$params | array | Массив параметров. | Да |
Доступные параметры массива $params:
| Параметр | Тип | Описание | Значение по умолчанию | Обязательный |
|---|---|---|---|---|
'new_items' | array|null | ??? | null | Да |
'filter' | array|null | ??? | null | Да |
'find' | array|null | ??? | null | Да |
'create' | function|null | ??? | null | Нет |
'update' | function|null | ??? | null | Нет |
'delete' | function|null | ??? | null | Нет |
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();
}