Работа с базой данных на низком уровне
Битрикс позволяет работать с базой данных на низком уровне, но это необходимо в небольшом числе случаев. Предпочтительно работать через ORM, которая позволяет программировать только на уровне бизнес-логики. Итак, сначала надо получить соединение с базой данных:
// Получить соединение с основной базой данных
$connection = Bitrix\Main\Application::getConnection();
// Подключение к дополнительной базе данных
$connection = Bitrix\Main\Application::getConnection('additional');
Настройка подключения к базе данных находится в файле .settings.php
:
/*
* Файл 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();
// подготавливаем строку (заменяет кавычки и прочее) для вставки в SQL запрос
$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()) {
PR($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);
Подробнее можно посмотреть в документации Битрикс.