Jump to content
AlexandrStep

Подключение дополнительной БД в дополнении к основной базе ?

Recommended Posts

Всем доброго!

 

Вопрос как правильно подключить еще одну базу в OC 2.3 ? База самодельная, на том же хостинге. 

Интересует именно техническая сторона вопроса. В типовом варианте есть класс db (файл db.php в library)

Если я сделаю новый файл db2.php и пропишу дополнительные константы для подключения, то в коде 

везде смогу так-же обращаться к этому классу по типу $this->db2->query 

и запрос уже будет выполнятся к второй базе верно ?

 

Ничего нигде больше не нужно будет править/добавлять ?

 

Просто кто уже может делал такое и какие грабли там всплыли где-то ?

 

Всем Спасибо!

Share this post


Link to post
Share on other sites
3 минуты назад, AlexandrStep сказал:

Если я сделаю новый файл db2.php

Вы плохо читаете код зачем еще отдельній класс?

$db2 = new DB(DB_DRIVER2, DB_HOSTNAME2, DB_USERNAME2, DB_PASSWORD2, DB_DATABASE2, DB_PORT2);
 

Share this post


Link to post
Share on other sites
28 минут назад, AlexandrStep сказал:

Всем доброго!

 

Вопрос как правильно подключить еще одну базу в OC 2.3 ? База самодельная, на том же хостинге. 

Интересует именно техническая сторона вопроса. В типовом варианте есть класс db (файл db.php в library)

Если я сделаю новый файл db2.php и пропишу дополнительные константы для подключения, то в коде 

везде смогу так-же обращаться к этому классу по типу $this->db2->query 

и запрос уже будет выполнятся к второй базе верно ?

 

Ничего нигде больше не нужно будет править/добавлять ?

 

Просто кто уже может делал такое и какие грабли там всплыли где-то ?

 

Всем Спасибо!

 

Да сможете, но вам предварительно необходимо поместить ващ объект $db2 в  $registry, для того чтобы к нему был доступ из дочерних классов движка.

Share this post


Link to post
Share on other sites
28 минут назад, chukcha сказал:

Вы плохо читаете код зачем еще отдельній класс?

$db2 = new DB(DB_DRIVER2, DB_HOSTNAME2, DB_USERNAME2, DB_PASSWORD2, DB_DATABASE2, DB_PORT2);
 

 

Спасибо большое , да я не силен в этом только учусь) 

То есть это прописать в том же файле db.php или же объявлять в каждом модуле где мне нужен будет

доступ ко 2-ой БД ? 

 

 

Share this post


Link to post
Share on other sites

Все понял в файле framework.php

 

есть строки 

// Database
if ($config->get('db_autostart')) {
	$registry->set('db', new DB($config->get('db_type'), $config->get('db_hostname'), $config->get('db_username'), $config->get('db_password'), $config->get('db_database'), $config->get('db_port')));
}

 

Просто нужно продублировать этот регистер сет с своими параметрами для второй базы и потом использовать его!

 

Всем спасибо!

Share this post


Link to post
Share on other sites
46 минут назад, AlexandrStep сказал:

Вопрос как правильно подключить еще одну базу в OC 2.3 ? База самодельная, на том же хостинге. 

Интересует именно техническая сторона вопроса. В типовом варианте есть класс db (файл db.php в library)

Если я сделаю новый файл db2.php и пропишу дополнительные константы для подключения, то в коде 

везде смогу так-же обращаться к этому классу по типу $this->db2->query 

и запрос уже будет выполнятся к второй базе верно ?

 

чтоб обратиться к таблице второй базы, то просто добавить в запрос имя этой базы, например:

$query = $this->db->query("SELECT * FROM `".$base."`.`".DB_PREFIX.$tabl."`");
return $query->rows;
//$base - ваша база
//$tabl - ваша таблица

 

Share this post


Link to post
Share on other sites
38 минут назад, vier сказал:

, то просто добавить в запрос имя этой базы,

Если пользователю доступны две базы

Share this post


Link to post
Share on other sites
2 минуты назад, chukcha сказал:

Если пользователю доступны две базы

ну конечно же - сделать соответствующие доступы.

Share this post


Link to post
Share on other sites
42 минуты назад, vier сказал:

 

чтоб обратиться к таблице второй базы, то просто добавить в запрос имя этой базы, например:


$query = $this->db->query("SELECT * FROM `".$base."`.`".DB_PREFIX.$tabl."`");
return $query->rows;
//$base - ваша база
//$tabl - ваша таблица

 

 

Хм... а там логин/пароль/роли другие, наверное не прокатит такой вариант... щас попробую!) Спс!

Share this post


Link to post
Share on other sites
2 минуты назад, AlexandrStep сказал:

 

Хм... а там логин/пароль/роли другие, наверное не прокатит такой вариант... щас попробую!) Спс!

- заходить под теми же доступами, что прописывается в конфиге для основной базы

Share this post


Link to post
Share on other sites

взять пользователя и пароль для новой базы с config.php

как пример вот эти:

define('DB_USERNAME', 'opencart');
define('DB_PASSWORD', '12345');

 

Share this post


Link to post
Share on other sites
1 час назад, vier сказал:

 

чтоб обратиться к таблице второй базы, то просто добавить в запрос имя этой базы, например:


$query = $this->db->query("SELECT * FROM `".$base."`.`".DB_PREFIX.$tabl."`");
return $query->rows;
//$base - ваша база
//$tabl - ваша таблица

 

 

ООП - не не слышал.

Это совет почти как. Если вам нужны данные из базы. Вставьте код в tpl.

Share this post


Link to post
Share on other sites
35 минут назад, Yoda сказал:

 

ООП - не не слышал.

Это совет почти как. Если вам нужны данные из базы. Вставьте код в tpl.

 

при чем здесь код (файл) tpl - других мыслей нет?

для удобства разве нельзя в модели это сделать:

public function myFun() {
	$base = 'new_base';
	$tabl = 'tabl_vasa';
	$query = $this->db->query("SELECT * FROM `".$base."`.`".DB_PREFIX.$tabl."`");
	return $query->rows;
}

 

Share this post


Link to post
Share on other sites
2 часа назад, Yoda сказал:

 

ООП - не не слышал.

Это совет почти как. Если вам нужны данные из базы. Вставьте код в tpl.

 

Ну человек предложил вариант, что бы не городить дополнительные огороды и при условиях доступности базы/ролей его вариант тоже имеет право быть!

В любом случае всем большое спасибо! Одна голова хорошо, а форум лучше!)

Share this post


Link to post
Share on other sites

Все зависит не от огород а от пространства

Если вам, например нужна синхронизация между таблицами баз
SELECT * FROM BASE.product pB
LEFT JOIN BASE2.product pB2 ON pB.product_id = pB2.product_id
WHERE pB2.product_id is NULL

то тогда владелец баз должен быть один

А если, на пример
$last_id = $this->db->getLastId();
$this->db2->query('UPDATE WHERE $last_id)

то тут владельцы могут быть разные

Share this post


Link to post
Share on other sites

всегда нужно идти по пути наименьшего сопротивления )

 

Share this post


Link to post
Share on other sites
Только что, vier сказал:

всегда нужно идти по пути наименьшего сопротивления )

Надо идти по пути максимальной безопасности

например одной записи есть права на SELECT
а другой - полный доступ.

Share this post


Link to post
Share on other sites
1 минуту назад, chukcha сказал:

Надо идти по пути максимальной безопасности

всегда.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.