Подключение к нескольким базам данных

Материал из Umicms
Версия от 10:40, 25 апреля 2018; Ekaterina.ermohina (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

Актуально для версии 2.18.

Если при выполнении вашего кастомного php-кода необходимо выполнить подключение к другой базе данных для выборки необходимых данных, то это можно сделать двумя способами.

Способ 1. Добавить новое соединение в config.ini:

Для добавления нового соединения с базой данных необходимо добавить в секцию [connections] файла config.ini данные для подключения к базе данных. Подключение к основной базе данных системы называется "core". Если назвать наше дополнительное подключение "other", то секция [connections] в файле config.ini будет выглядеть, например, вот так:

[connections]
#основное подключение к бд
core.type = "mysql"
core.host = "localhost"
core.login = "umi"
core.password = "umi"
core.dbname = "umi"
core.port = 
core.persistent = "0"
core.compression = "0"
core.api = "mysql"
#дополнительное подключение к бд
other.type = "mysql"
other.host = "localhost"
other.login = "umi"
other.password = "umi"
other.dbname = "other"
other.port = 
other.persistent = "0"
other.compression = "0"
other.api = "mysql"

Дополнительное подключение в кастомном методе можно будет получить следующим образом:

$pool = ConnectionPool::getInstance();
$conn = $pool->getConnection("other");

Способ 2. Создать новое соединение в кастомном методе:

С помощью класса ConnectionPool, который расположен в файле \classes\system\subsystems\database\ConnectionPool.php можно создать новое подключение.

Далее будет приведен пример кода, который осуществляет подключение к основной и второй базам данных, происходит выборка из второй базы данных, после чего на основании полученных данных создается страница типа "Новость":

$pool = ConnectionPool::getInstance();
//основная база данных
$pool->addConnection("core", "localhost", "umi", "umi", "umi");
//вторая база данных
$pool->addConnection("comfort", "localhost", "umi", "umi", "comfort");
$pool->init();

$conn = $pool->getConnection('comfort');
$sql = "SELECT 	alt_name  FROM `cms3_hierarchy` WHERE `id` = 72";
//выполнение запроса к второй базе данных
$result = $conn->query($sql, true);
list($name) = mysql_fetch_row($result);


//Создание новости с помощью API в основной базе
 $hierarchyTypes = umiHierarchyTypesCollection::getInstance();
 $hierarchyType = $hierarchyTypes->getTypeByName("news", "item");
 $hierarchyTypeId = $hierarchyType->getId();
 
 $hierarchy = umiHierarchy::getInstance();
 

 //add new element
 $newElementId = $hierarchy->addElement(0, $hierarchyTypeId, $name, 'umitest');
 if($newElementId === false) {
  echo "Не удалось создать новую страницу";
 }
 
 //Установим права на страницу в состояние "по умолчанию"
 $permissions = permissionsCollection::getInstance();
 $permissions->setDefaultPermissions($newElementId);
 
 //Получим экземпляр страницы
 $newElement = $hierarchy->getElement($newElementId);
 
 if($newElement instanceof umiHierarchyElement) {
  $newElement->setValue("h1", 'umitest');
  $newElement->setValue("publish_time", time());
  $newElement->setIsActive(true);
  $newElement->commit();
  
  echo "Успешно создана страница с адресом: \"", $hierarchy->getPathById($newElementId), "\"";
 } else {
  echo "Не удалось получить экземпляр страницы #{$newElementId}.";
 }