Подключение к нескольким базам данных — различия между версиями
Mad grant (обсуждение | вклад) |
|||
(не показаны 4 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
− | Если при выполнении вашего кастомного php-кода необходимо выполнить подключение к другой базе данных | + | <b>Актуально для версии 2.18.</b> |
+ | |||
+ | Если при выполнении вашего кастомного php-кода необходимо выполнить подключение к другой базе данных для выборки необходимых данных, то это можно сделать двумя способами. | ||
+ | <h4><b>Способ 1. Добавить новое соединение в config.ini</b>:</h4> | ||
+ | Для добавления нового соединения с базой данных необходимо добавить в секцию [connections] файла config.ini данные для подключения к базе данных. | ||
+ | Подключение к основной базе данных системы называется "core". | ||
+ | Если назвать наше дополнительное подключение "other", то секция [connections] в файле config.ini будет выглядеть, например, вот так: | ||
+ | <source lang="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" | ||
+ | </source> | ||
+ | Дополнительное подключение в кастомном методе можно будет получить следующим образом: | ||
+ | <source lang="php"> | ||
+ | $pool = ConnectionPool::getInstance(); | ||
+ | $conn = $pool->getConnection("other"); | ||
+ | </source> | ||
+ | |||
+ | <h4><b>Способ 2. Создать новое соединение в кастомном методе</b>:</h4> | ||
+ | С помощью класса ConnectionPool, который расположен в файле '''\classes\system\subsystems\database\ConnectionPool.php''' можно создать новое подключение. | ||
Далее будет приведен пример кода, который осуществляет подключение к основной и второй базам данных, происходит выборка из второй базы данных, после чего на основании полученных данных создается страница типа "Новость": | Далее будет приведен пример кода, который осуществляет подключение к основной и второй базам данных, происходит выборка из второй базы данных, после чего на основании полученных данных создается страница типа "Новость": |
Текущая версия на 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}.";
}