Подключение другой БД MySql

#1 30 октября 2025 в 11:43

Привет. Есть ли в системе готовый метод(ы) для подключения другой бд? Например в каком то экшене нужно подключиться и потом работать с другой бд, той же структуры, что и рабочая.

#2 30 октября 2025 в 11:53

 Lora, судя по коду, да. Сам не пробовал, только делал выборки из таблиц с другим префиксом.

Создаете новый объект типа db github.com/instantsoft/icms2/blob/master/system/core/database.php

Примерно так

  1. //$myoptions['db_host']...['db_user']...['db_pass']...['db_base']
  2. $mydb = new Database($myoptions);

А потом передаете это соединение при вызове модели github.com/instantsoft/icms2/blob/5689b49002624aceb9cc4b692f1bf47f7da5ed1e/system/core/model.php#L97

Примерно так

  1. $myModel = new Model($mydb);
#3 30 октября 2025 в 11:59

Ок, спасибо, буду пробовать.

Сегодня в 13:11
#4 30 октября 2025 в 12:37
  1. $db = cmsDatabase::getInstance();
  2. $db->setOptions($options);
  3. $db->setDbPrefix($options['db_prefix']);
  4. $db->changeDB($options['db_base']);
  5. $db->query("SET sql_mode=''"); // Это не обязательно
  6.  
  7. $model = new cmsModel($db);
  8. $model->db = $db;
  9. $model->db->reconnect(true);
  10.  

Как-то так. В $options нужны только данные для подключения к базе и опции базы.

#5 30 октября 2025 в 13:03

Судя по коду всё должно работать. Но вот не хочет по феншую. Если писать так

  1. $newOptions = [...];
  2.  
  3. $mydb = new Database($myoptions);
  4.  
  5. $model = new cmsModel($mydb);

То запрос в новую базу выполняется. Но в опциях базы не все данные конфига.

Если устанавливать опции через метод

  1. $mydb = cmsDatabase::getInstance();// new Database();
  2.  
  3. $mydb->setOptions($newOptions);

То в опциях всё как и положено и новые данные для подключения. Но при попытке запроса, запрос идёт почему то в текущую базу. При попытке реконекта ($model->db->reconnect(true);) вообще всё чёрное и ошибок не разобрать. как будто подключение есть, но все остальные настройки из текущего конфига.

#6 30 октября 2025 в 13:21

В $options достаточно иметь только этот массив данных, только со своими значениями. Плюс, если база находится на другом хостинге, то там надо смотреть, чтобы был активен «удаленный доступ» к базе данных.

  1. [
  2. 'db_host' => $this->cms_config->db_host,
  3. 'db_user' => $this->cms_config->db_user,
  4. 'db_pass' => $this->cms_config->db_pass,
  5. 'db_base' => $this->cms_config->db_base,
  6. 'db_charset' => $this->cms_config->db_charset,
  7. 'db_prefix' => $this->cms_config->db_prefix
  8. ];
Добавлено спустя 2 минуты

И после того, как натворили делов в другой базе, не забудьте переподключится обратно к свое базе. Так ошибок будет меньше на экране.

#7 30 октября 2025 в 13:25

С опциями всё нормально. Я думаю понял в чём проблема. Нужна чистая база изначально. Или синхронизированная с текущей. Так как система начинает искать данные из подключённой базы. Виджеты например. Но это уже другой вопрос. 

#8 30 октября 2025 в 13:29

Так как система начинает искать данные из подключённой базы. Виджеты например.

Lora

Всё верно, также хуки и прочие творения, котороые даже не знают о новом подключении к другой базе. Поэтому важно после «получения/отправки» данных в другую базу, переподключиться к своей.

#9 30 октября 2025 в 13:59

Ясно.Спасибо всем. Пока не закрываю.Мало ли что)

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.

Похожие темы

[ЗАКРЫТО] Биллинг и крипто

Биллинг Создана 3 года назад 1 сообщение

Похожее в блогах

🍪Мы используем файлы cookie для работы сайта. Читать подробнее.