Битрикс. Работа с базой данных

30.10.2018

Теги: CMSБазаДанныхБитриксЗапросНовоеЯдро

Битрикс позволяет работать с базой данных на низком уровне, но это необходимо в небольшом числе случаев. Предпочтительно работать через ORM, которая позволяет программировать только на уровне бизнес-логики. Итак, сначала надо получить соединение с базой данных:

// Получить соединение с основной базой данных
$connection = Bitrix\Main\Application::getConnection();
// Подключение к дополнительной базе данных
$connection = Bitrix\Main\Application::getConnection('additional');
/*
 * Файл bitrix/.settings.php
 */
return array (
    /*...*/
    'connections' => array (
        'value' => array (
            'default' => array ( // основная база данных
                'className' => '\\Bitrix\\Main\\DB\\MysqliConnection',
                'host' => 'localhost',
                'database' => 'bitrix3', // имя базы данных
                'login' => 'bitrix3',    // имя пользователя БД
                'password' => '.....',   // пароль пользователя БД
                'options' => 2.0,
            ),
            'additional' => array ( // дополнительная база данных
                'className' => '\\Bitrix\\Main\\DB\\MysqliConnection',
                'host' => 'localhost',
                'database' => 'bitrix4', // имя базы данных
                'login' => 'bitrix4',    // имя пользователя БД
                'password' => '.....',   // пароль пользователя БД
                'options' => 2.0,
            ),
        ),
        'readonly' => true,
    ),
    /*..*/
);

Запрос к базе данных с получением результата:

$connection = Bitrix\Main\Application::getConnection();

// Подготовка строки для использования в sql-запросе
$login = 'admin';
$sqlHelper = $connection->getSqlHelper();
$data = $sqlHelper->forSql($login, 50);

$query = "SELECT `NAME`, `LAST_NAME`, `EMAIL` FROM `b_user` WHERE `LOGIN` = '".$data."'";
$result = $connection->query($query);

if ($user = $result->fetch()) {
    debug($user);
}
Array
(
    [NAME] => Сергей
    [LAST_NAME] => Иванов
    [EMAIL] => ivanov.s@host14.ru
)

Скалярный запрос (возвращает не набор данных, а конкретное значение):

$query = "SELECT COUNT(`ID`) FROM `b_user` WHERE 1";
$count = $connection->queryScalar($query);

Запрос без получения результата:

$connection->queryExecute("INSERT INTO `some_table` (`NAME`, `SORT`) VALUES ('Название', 100)");

Удалить таблицу:

$connection->dropTable($tableName);

Очистить таблицу:

$connection->truncateTable($tableName);

Проверить существование таблицы:

$connection->isTableExists($tableName);

Переименовать таблицу:

$connection->renameTable($oldName, $newName);

Получить поля таблицы:

$connection->getTableFields($tableName);

Удалить колонку в таблице:

$connection->dropColumn($tableName, $columnName);

Создать первичный ключ:

$connection->createPrimaryIndex($tableName, $columnNames);

Создать индекс:

$connection->createIndex($tableName, $indexName, $columnNames);

Подробнее можно посмотреть в документации Битрикс.

Поиск: CMS • База данных • Битрикс • Запрос • Новое ядро

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.