PHP - два MySQL-соединения, работает только второе - PullRequest
0 голосов
/ 05 февраля 2011

Я посмотрел везде, вероятно, погуглил каждый вариант моего вопроса, который мог придумать, и я попробовал все предложения ... Я пытаюсь подключиться к двум разным БД в двух разных местах ($ локальный и $ удаленный) и работает только второй. Вот пример моего кода ("..." = скрытый):

//-------------Local DB Connection:
    $local = mysql_connect("localhost","root","...");
    if (!$local)
    {
        die('Could not connect: ' . mysql_error());
    }
    $sel1 = mysql_select_db("new", $local);
//-------------Remote DB Connection:
    $remote = mysql_connect("...","...","...",true);
    if (!$remote)
    {
        die('Could not connect: ' . mysql_error());
    }
    $table = "...";

//---------function selecting from local:
    function fncGrabNemsis($ele,$val){
        mysql_select_db("new", $local);
        $result = mysql_query("SELECT * FROM new.tblvalues
        WHERE fldelement='$ele' AND fldcode='$val'",$local);
        $tmprow = mysql_fetch_array($result);
        return (isset($tmprow['fldvariable'])?$tmprow['fldvariable']:$val);
    }

//----------Select run from Remote:
        mysql_select_db("ImdxTest", $remote);
        $result = mysql_query("SELECT * FROM ImdxTest.$table WHERE ClientID = ... AND IncidentNum = '$fldINCID'", $remote) or die(mysql_error());
        $row = mysql_fetch_array($result);

Я пытался переместить вызовы функций mysql_select_db () везде, где только можно придумать и обо всем остальном ... Что происходит, я получаю ошибки php, говорящие, что $ local не определен или что функция mysql пытается для использования $ local ожидаем, что параметры будут ресурсами !? Я точно знаю, что оба соединения работают, потому что по отдельности они оба работают. Работает только второе соединение ($ remote) ... Большое спасибо за любые предложения!

Ответы [ 4 ]

3 голосов
/ 05 февраля 2011

fncGrabNemsis нужна глобальная переменная $local:

    function fncGrabNemsis($ele,$val){
        global $local;
        mysql_select_db("new", $local);
        $result = mysql_query("SELECT * FROM new.tblvalues
        WHERE fldelement='$ele' AND fldcode='$val'",$local);
        $tmprow = mysql_fetch_array($result);
        return (isset($tmprow['fldvariable'])?$tmprow['fldvariable']:$val);
    }

Это должно помочь вам лучше понять: http://php.net/manual/en/language.variables.scope.php

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

Вы звоните fncGrabNemsis из функции.Когда вы открываете функцию, вы получаете чистый лист с точки зрения переменных.Переменные, которые ранее существовали, больше не работают.$local теперь не определено.

Простой способ обойти это - установить $local в глобальное значение:

function fncGrabNemsis($ele,$val){
    global $local; 
    mysql_select_db("new", $local);
    ...

Глобальные переменные, вероятно, не очень хорошая идея.Вы должны переработать свой код так, чтобы он стал ненужным.

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

$local недоступно внутри вашей функции.Пожалуйста, прочитайте это: http://php.net/manual/en/language.variables.scope.php

[W] В пользовательских функциях вводится область локальных функций.Любая переменная, используемая внутри функции, по умолчанию ограничена областью локальной функции.

В PHP, в отличие от многих других языков, внешняя область не доступна в функциях.Вы должны либо передать переменную в качестве аргумента (предпочтительное решение), либо использовать ключевое слово gloabal, чтобы импортировать переменную из глобальной области.

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

Я вижу, что вы используете $local внутри функции, вы должны использовать global $local для ссылки на глобальную переменную области действия $local из области действия функции.

...