Настройки LAMP - PHP и несколько соединений с БД с помощью mysql_connect () - PullRequest
0 голосов
/ 15 февраля 2011

Мне было поручено поддерживать доисторическое приложение PHP, которое использует некоторый класс phpDB, написанный Джо Тонгом, последний раз обновленный в 1999 году. Это приложение подключается к двум различным базам данных на одном сервере, получая некоторые данные из одной и другой извторой.

Теперь ограничение mysql_connect состоит в том, что он использует тот же ресурс соединения для новых соединений.Поэтому, если я использую следующий код:

$db1 = new phpDB()->connect(/* db1data, database 'one' */);
$db2 = new phpDB()->connect(/* db2data, database 'one' */);
$data = $db1->query($somequery); 

РЕДАКТИРОВАТЬ ПРИМЕЧАНИЕ: new phbDB()->connect просто устанавливает некоторые внутренние значения и выполняет стандартные mysql_connect без параметра $new_link.

Теперь проблема в том, что $query - это , выполняемый над базой данных два , потому что он переписал предыдущее соединение.

Эту проблему можно решить, используя true в качестве четвертогопараметр в mysql_connect.Дело в том, что я бы предпочел , а не что-то переписать в 12-летней библиотеке (из-за страха того, как это отреагирует на живом сервере), а также на четвертом параметре на живом сервере.Однако, поскольку я не являлся гуру сервера, я не смог найти правильную директиву в конфигурации сервера, чтобы включить мою локальную конфигурацию MAMP, чтобы быть ближе к эмуляции рабочей среды.

Может кто-нибудь мне помочь?Спасибо.

РЕДАКТИРОВАТЬ : сама оболочка:
phpDB.php - обертка db - http://scrp.at/wd
phpDB-mysql.php - MySQL конкретный код - http://scrp.at/we

Ответы [ 2 ]

2 голосов
/ 15 февраля 2011

Способ исправить это - изменить метод query.

Где-то внутри это зовет mysql_query(). Все, что вам нужно сделать, это добавить второй параметр, который включает ссылку на внутреннюю переменную, содержащую ссылку на соединение MySQL.

Это предположение, потому что вы не разместили ни одного кода, но я думаю, вы увидите что-то вроде этого:

Старый

function query($thequery) {
    mysql_query($thequery);
    ....
}

Измените это на

function query($thequery) {
    mysql_query($thequery, $this->dbreference);
    ....
}

Какое бы слово "dbreference" не называлось в вашем классе, я понятия не имею. Посмотрите, какая переменная установлена, когда вызывается mysql_connect.

1 голос
/ 15 февраля 2011

Посмотрите на следующие страницы:

http://nl.php.net/manual/en/function.mysql-connect.php

http://nl.php.net/manual/en/function.mysql-query.php

Заполнив параметр new_link, вы можете добавитьновое соединение.

Например:

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password', 'link1');
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password', 'link2');

mysql_query($query, 'link1'); //query on database 1
mysql_query($query, 'link2'); //query on database 2
...