Подключение к нескольким базам данных — различия между версиями
(не показана 1 промежуточная версия этого же участника) | |||
Строка 1: | Строка 1: | ||
+ | <b>Актуально для версии 2.18.</b> | ||
+ | |||
Если при выполнении вашего кастомного php-кода необходимо выполнить подключение к другой базе данных для выборки необходимых данных, то это можно сделать двумя способами. | Если при выполнении вашего кастомного php-кода необходимо выполнить подключение к другой базе данных для выборки необходимых данных, то это можно сделать двумя способами. | ||
<h4><b>Способ 1. Добавить новое соединение в config.ini</b>:</h4> | <h4><b>Способ 1. Добавить новое соединение в config.ini</b>:</h4> |
Текущая версия на 10:40, 25 апреля 2018
Актуально для версии 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}.";
}