Привет всем! Возникла проблема. Я создал свой модуль для Joomla 1.0, но после публикации этого модуля не работают другие модули. Дело в том, что в моём модуле я устанавливаю коннект с другой базой данных (не joomla) через: $connect = mysql_connect($mysql_addr,$mysql_user,$mysql_pass) or die("Failed to connect to mySQL server"); mysql_select_db($mysql_db, $connect) or die("Could not select database"); Так вот следущий модуль пытается выполнить коннект к базе данных $mysql_db, а не к джумловской... Как в данном случае правильно поступить? Если выход? P.S. Мне тут на joomla.org форуме подсказали вот это: http://dev.joomla.org/component/option,com_jd-wiki/Itemid,/id,tips:connect_external_database/ Но походу это для 1.5...
Ответ: Несколько коннектов к MySQL в модулях Вообщем тема такая. Надо объект $database который есть - куда-нибудь сохранить, а потом восстановить. Плюс можно после окончания работы компонента сделать реконнект к джумловской базе, т.е. сделать новый $database. Как вариант.
Ответ: Несколько коннектов к MySQL в модулях Тема прикольная, если бы я ещё во всём этом варил... I am a newbie
Ответ: Несколько коннектов к MySQL в модулях Я не разбирался как идёт обращение к джумловской базе, делается общий запрос сразу на всё содержимое, или для каждого блока отдельно. Но судя по тому что обращение прерывается к остальным модулям, то скорее всего имеется общий запрос, что и разумно. А значить джумла делает сначало подключение к базе, а каждый модуль или компонент делает подключение к своей таблице. А это значить, как вариант нужно в начале модуля отключить джумловский коннект к базе, запустить, выполнить и завершить коннект к другой базе, и после этого сделать коннект к базе джумлы. Ну и для надёжности можно как написал Dead Krolik, сделать копию для $database, типа $database2=$database, а перед реконнектом восстановить. Я так понимаю ты знаешь как подключаться и отключаться, иначе бы ты не делал свой модуль. Посмотри в инклюдах файл database.php, от туда сможешь взять строки кода для реконекта к джумловской базы.
Ответ: Несколько коннектов к MySQL в модулях Всё это хорошо, но вот в database.php я потерялся... Там блин классы, функции... Я в этом не силён... Добавлено через 5 часов 26 минут Такс, немного продвинулся в этом вопросе. У меня на главном сайте стоит mod_php и в нём занесён свой код, который выполняет коннект к внешнему ip и к внешней базе данных (не к localhost). Так вот это работает и никаких глюков не наблюдается. Как только в качестве адреса указывается localhost идёт ступор.
Ответ: Несколько коннектов к MySQL в модулях Не пойму, ну разве нельзя в конце твоего кода модуля вставить пару строк, с данными джумловской базы? Если не пройдёт, значить проблема быстрей всего в настройках локалки. Я тоже не спец по базам, и ни слишком в пхп, но можно и немного погуглить, чтобы найти, что запрос к базе автоматически закрывается после каждой транквизиции. И в принципе, должно автоматом подключаться дальше, если в джумла не используется одноразовое подключение при загрузке страници. Значить, если не подключается, то надо попробовать подключиться снова после выполнения своего кода. Код (CODE): #MySQL server connect $id_con = mysql_connect('localhost', 'DBUserName', 'DBPasswod') or die('невозможно соединиться с сервером'); #Select db mysql_select_db('DBName') or die('Невозможно выбрать базу');
Ответ: Несколько коннектов к MySQL в модулях Хммм... Ну да, такой вариант прокатил. Но как это сказывается на производительности, учитывая что у меня два таких модуля будет?
Ответ: Несколько коннектов к MySQL в модулях bzzik, в общем то не как, так как это всеголишь подключение а не выборка данных. Нагрузка на сервер и базу происходит как раз при получении данных, а подключение оно кратковременное. Даже если учесть что на сайт зайдёт одновременно 100 пользователей, то это будет всё равно в 1000 раз меньше нагрузка, чем когда все 100 начнут грузить данные.
Ответ: Несколько коннектов к MySQL в модулях Ну вот что в итоге получилось: Забираем параметры баз из настроек модуля: Код (CODE): $mysql_addr = $params->get( 'mysql_addr', localhost ); $mysql_user = $params->get( 'mysql_user' ); $mysql_pass = $params->get( 'mysql_pass' ); $mysql_db = $params->get( 'mysql_db' ); $addr = $params->get( 'addr', localhost ); $user = $params->get( 'user' ); $pass = $params->get( 'pass' ); $db = $params->get( 'db' ); где $addr, $user, $pass, $db - данные о джумловской базе данных, а в конце делаем проверку и на основании проверки мы ли бо просто меняем базу данных, либо делаем полный обратный коннект: Код (CODE): <?php if ($addr == $mysql_addr) { mysql_select_db($db) or die("Could not select database"); } else { $link = mysql_connect($addr, $user, $pass) or die("Failed to connect to mySQL server"); mysql_select_db($db) or die("Could not select database"); } ?> Получилось громоздко, но зато работает. Если есть предложения по оптимизации, выслушаю И ещё один доп вопрос - я забираю из параметров адрес бызы через $params->get( 'mysql_addr', localhost ). Но у меня возникли подозрения, что если поставить цифровое значение в параметрах модуля (к примеру IP, а не localhost по умолчанию), то оно не будет обрабатыватся. Так ли это? Добавлено через 1 час 23 минуты Доп вопрос отпал - всё работает.
Ответ: Несколько коннектов к MySQL в модулях Я ток собирался ответить, а мне выдало о новом сообщении. Ну раз уже проверил и работает, то дело в кармане. А по оптимизации, думаю тут нечего оптимизировать, да и что, две строчки проверки?
Ответ: Несколько коннектов к MySQL в модулях Ну мало ли, я вообще в первый раз пишу что-то своё Всем спасибо за поддержку и помощь.
Ответ: Несколько коннектов к MySQL в модулях Dead Krolik, ну яж говорю, я не спец по базам, я исхожу из того, что сам чисто конект к конкретной базе происходит один раз, а вот конект для выборки данных к подключенной базе, сотни раз. Да и что делать, если в данном варианте конект к базе отрубается из за конекта к другой базе?..., единственный вариан переконектится. Так что думаю, трудоёмок или нет, конечный пользователь этого может и не заметит. Вариантов с другими базами есть много, к примеру когда на сайты инфу цепляют из другой базы форума.