YuZi

ВОПРОС: Как подключить один магазин к разным БД Mysql ?

Рекомендуемые сообщения

YuZi    7

В CMS Opencart подключение к БД MySQL проходит через файл config.php где и указываются данные к ОДНОЙ базе MySQL.

Как подключить ДВЕ базы MySQL ?

Например:

Есть два магазина на движке opencart 1.5.3.1, каждый из них использует свою БД MySQL и свой файл config.php

Нужно сделать что бы из второго магазина было подключение к БД первого магазина, а именно таблицы 'customer', тоесть информация о покупателях общая для двух магазинов.

При этом удалены все возможные обращения к БД из личного кабинета покупателя, дабы избежать обращение к разным БД.

Вариант с вложенными магазинами (что предусмотренно в движке OpenCart) не подходит из-за недостатка в качественной SEO оптимизации магазина и использование только одного домена.

Я отдаю себе отчёт что нагрузка на сервер увеличится...

Изменено пользователем YuZi

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Einshtein    637

а не проще будет периодически делать импорт экспорт этих таблиц?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
YuZi    7

а не проще будет периодически делать импорт экспорт этих таблиц?

Я рассматривал этот вариант, он конечно проще в реализации, но мне нужна динамическая связь двух магазинов которая может меняться ежеминутно. Так пришел к выводу что проще будет сделать запрос к одной таблице БД

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
freelancer    1 420

В CMS Opencart подключение к БД MySQL проходит через файл config.php где и указываются данные к ОДНОЙ базе MySQL.

Как подключить ДВЕ базы MySQL ?

index.php

// Database
$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
$registry->set('db', $db);
// Database 2

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

$registry->set('db2', $db2);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
YuZi    7

Добавил в файл index.php два подключения к БД:

// Database
$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
$registry->set('db', $db);


// Database 2
$db2 = new DB(DB_DRIVER2, DB_HOSTNAME2, DB_USERNAME2, DB_PASSWORD2, DB_DATABASE2);
$registry->set('db2', $db2);

а также прописал в файле config.php данные к подключению двух БД:

// DB
define('DB_DRIVER', 'mysql');
define('DB_HOSTNAME', 'localhost');
define('DB_USERNAME', '111);
define('DB_PASSWORD', '1234567890');
define('DB_DATABASE', '111');
define('DB_PREFIX', '111_');


// DB2
define('DB_DRIVER2', 'mysql');
define('DB_HOSTNAME2', 'localhost');
define('DB_USERNAME2', '222');
define('DB_PASSWORD2', '1234567890');
define('DB_DATABASE2', '222');
define('DB_PREFIX2', '222_');

теперь Магазин Умер... Не выдает никаких ошибок, только чистый белый фон,

Что я не так сделал или что-то где-то надо дописать еще?

П.С. Использую Opencart 1.5.3.1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
estart    0

Нужно сделать что бы из второго магазина было подключение к БД первого магазина, а именно таблицы 'customer', тоесть информация о покупателях общая для двух магазинов.

Есть рабочие архитектурные решения много ИМ на одной базе, а один магазин к 2 базам что-то Вы перемудриваете :) имхо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
YaSe    23

Настройте репликацию между площадками, как вариант

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
estart    0

Либо оба ИМ к 1С Бухгалтериии и обрабатывать там.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
YuZi    7

Есть рабочие архитектурные решения много ИМ на одной базе, а один магазин к 2 базам что-то Вы перемудриваете :) имхо

Приведите пожалуйста пример таких архитектурных решений, или имеется ввиду одна БД с разными префиксами для каждого ИМ ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
YuZi    7

Настройте репликацию между площадками, как вариант

из всего выше сказанного я знаю ДВА СЛОВА: "настройте" и "вариант" =))

Что такое репликация между площадками?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
YuZi    7

Либо оба ИМ к 1С Бухгалтериии и обрабатывать там.

Очень дорого получается если учесть все моменты:

- покупка самой платформы 1С

- установканастройка платформы

- программинг конфигураций под конкретные запросы

- обновленияподдержка ПО

- и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
YaSe    23

из всего выше сказанного я знаю ДВА СЛОВА: "настройте" и "вариант" =))

Что такое репликация между площадками?

Тогда забудьте, вам это не подойдет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
freelancer    1 420

теперь Магазин Умер... Не выдает никаких ошибок, только чистый белый фон,

Что я не так сделал или что-то где-то надо дописать еще?

П.С. Использую Opencart 1.5.3.1

у меня этот вариант работает. разбирайся в этом направлении

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
YuZi    7

у меня этот вариант работает. разбирайся в этом направлении

Вы правы, все проверил - все работает, вот только подключается только одна БД, та которая стоит последней в списке.

если вот так:

// Database
$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
$registry->set('db', $db);

// Database 2
$db2 = new DB(DB_DRIVER2, DB_HOSTNAME2, DB_USERNAME2, DB_PASSWORD2, DB_DATABASE2);
$registry->set('db2', $db2);
то идет подключение всего магазина к базе БД2

а если вот так:

// Database 2
$db2 = new DB(DB_DRIVER2, DB_HOSTNAME2, DB_USERNAME2, DB_PASSWORD2, DB_DATABASE2);
$registry->set('db2', $db2);
// Database
$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
$registry->set('db', $db);
То к первой...

В итоге одна база задействуется...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
regr0up    1

если еще интересно... мало ли))) 

чтобы это исправить, нужно в /system/database/mysql.php

в функции дописать mysql_connect(..., $password, TRUE);

 

и тогда делайте сколько угодно подключений.

 

---

Выпрямляем OpenCart...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
itmades    2

у меня этот вариант работает. разбирайся в этом направлении

У меня он тоже не убивает сайт: возможно проблема хостинга или сервера,

Но никаких результатов не дает: товары из второй базы не берутся

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
halfhope    170

Вы что-то перемудриваете. OpenCart позволяет создавать разные магазины с разными наборами товаров модулей шаблонов на разных доменах и т.д. Не делайте костыли, хотя мне все равно.

 

В конце концов можно написать модуль/скрипт синхронизации покупателей, который при определенном событии (регистрация/активация клиента) будет синхронизировать данные покупателей из двух БД.

Изменено пользователем halfhope

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Похожий контент

    • От f4rr3ll1990
      Ребят, подскажите в чем может быть проблема, пишу модуль, необходимо сделать выборку полностью всех товаров, и вродебы все ок, но мне отдает только 50 штук, а их в магазине около 5К 
      Вот фрагмент модели в котором происходит выборка:
       
      public function getProducts () { $products = array(); $query = $this->db->query(" SELECT b.name AS name, p.quantity AS quantity, p.price AS price, p.price_zak AS price_zak, p.product_id AS product_id, c.category_id AS category_id, d.quantity AS discount_quantity, d.price AS discount_price FROM " . DB_PREFIX . "product AS p JOIN " . DB_PREFIX . "product_description AS b ON p.product_id = b.product_id JOIN " . DB_PREFIX . "product_to_category AS c ON p.product_id = c.product_id JOIN " . DB_PREFIX . "product_discount AS d ON p.product_id = d.product_id "); foreach ($query->rows as $result) { $products[] = $result; } return $products; } Запрос по идее должен быть верным и должно отдавать мне все, но на практике только первые 50 (((
      Кто нибудь сталкивался с таким?
    • От OlegF
      Всем привет! Нужна помощь тех, кто разбирается в MySQL, поскольку я только начинаю вникать и возникла проблема с запуском сайта http://beesworld-shop.esy.es. Зашел на сайт и обнаружил такую ошибку (см. прикрепленное изображения). Ничего, что могло бы привести к таким последствиям, не делал. Последние время только добавлял фотографии к товарам и все – настройки  и ничего другого не делал.
      Кто подскажет, что можно сделать? Может уже есть готовое решение на форуме, где можно почитать и понемножку разобраться.

       
      Платформа - OpenCart 2.0.1.2
       
      Платформа размещена на - http://hostinger.com.ua
       
      Тариф - бесплатный
       
      Спасибо!!!

    • От perfectpc
      Требуется помощь в выгрузке товара на opencart pro 2.3
      Ситуация такова. Имеются товары (около 2-3 тысяч) с привязками к категориям. Нередки случаи, когда один товар имеет 5000 категорий для подбора товара.
      Либо же консультация по оперативной выгрузке, либо консультация или услуга по объединению двух баз данных с одинаковой структурой.
      Нужна либо платная консультация либо услуга выгрузки.
      Жду предложения на почту или в личку с примерными ценами.
      Ситуация специфическая, готов за платить просто за информацию
    • От VannDogg
      Все привет.
       
      Нужна помощь следующего рода: нужно сформировать запрос в БД для того чтобы отключить отображение товаров определенной категории.
      Проблема в том, что отображение товаров редактируется в таблице oc_product, а связи з категориями - в таблице oc_product_to_category.
      Нужно чтобы запрос проверял product_id на предмет связи с конкретным category_id и назначал status =1. То есть нужен запрос с действием в одну таблицу с проверкой данных их другой... Я в SQL "зелень" потому и нужна помощь...
    • От WebDevYV
      Есть скрипт, который на локальной машине работает корректно, но при установке его на сервер в файл product.tpl (cms OpenCart 2.3.0.2, theme Next Default 3)ничего не происходит. Скрипт берет цену из таблицы с учетом id товара. Ошибок код никаких не выводит. Спасибо за помощь.
      <?php $host = 'хост'; $db = 'имя бд'; $user = 'юзер нейм'; $pass = 'пароль'; $charset = 'utf8'; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $opt = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; $pdo = new PDO($dsn, $user, $pass, $opt); $stmt = $pdo->prepare('SELECT price FROM oc_product WHERE product_id = ?'); $stmt->execute([$_GET['id']]); foreach ($stmt as $row) { echo 'price '.$row['price'] . "\n"; } ?>  
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу