Соединение с базой.

Discussion in 'PHP' started by OdaN, 24 Apr 2009.

  1. OdaN

    OdaN Elder - Старейшина

    Joined:
    4 Mar 2006
    Messages:
    192
    Likes Received:
    17
    Reputations:
    1
    Люди, подскажите пожалуйста. Есть скрипт, который работает с базой, примерно так:

    PHP:
    $db="db";
    $user="dbuser";
    $pass='dbpass';
    $server="db.site.com";
    @
    mysql_connect($server,  $user,  $pass);
    @
    mysql_select_db($db);

    //много букав как мы берем из базы, показываем, вносим в базу, изменяем, и все остальное....
    Дык вот стал вопрос:
    Гдето посередине скрипта надо соединится к совсем другой базе, на совсем другом сервере. У меня получилось как-то так:

    PHP:
    $db="db";
    $user="dbuser";
    $pass='dbpass';
    $server="db.site.com";
    @
    mysql_connect($server,  $user,  $pass);
    @
    mysql_select_db($db);

    //много букав как мы берем из базы, показываем, вносим в базу, изменяем, и все остальное....

    function get_var_db2() {
    $db2="db2";
    $user2="dbuser2";
    $pass2='dbpass2';
    $server2="db2.site.com";

    @
    mysql_connect($server2,  $user2,  $pass2);
    @
    mysql_select_db($db2);

    $var=mysql_result(mysql_query("select var from table"),0,"var");
    return 
    $var
    mysql_close(); }

    get_var_db2();

    //много букав как мы берем из базы, показываем, вносим в базу, изменяем, и все остальное....
    echo $var;
    //много букав как мы берем из базы, показываем, вносим в базу, изменяем, и все остальное....
    И собственно трабл в том, что после выполнения функции подключение к db2 остается, и все запросы которые идут ниже долбятся туда.
    Как можно реализовать тихое, скромное, никому не мешающее соединение, и соответственно вывод переменной? =)
     
  2. RESPECТ

    RESPECТ Member

    Joined:
    6 Feb 2009
    Messages:
    9
    Likes Received:
    6
    Reputations:
    0
    OdaN, попробуй сделать так (на случай, если соединение не закрыватеся), но это врядли:
    PHP:
    $in = @mysql_connect($server2,  $user2,  $pass2); 
    @
    mysql_select_db($db2);
    // ...
    mysql_close($in);
    Пробуй:
    Убери функцию get_var_db2(), и пробуй без неё... Она вообще тебе нужна?

    Также могут быть ошибки у тебя в запросах, выложи сюда...
     
  3. OdaN

    OdaN Elder - Старейшина

    Joined:
    4 Mar 2006
    Messages:
    192
    Likes Received:
    17
    Reputations:
    1
    нет, в запросах нету ошибок,
    PHP:
    $in = @mysql_connect($server2,  $user2,  $pass2);  
    @
    mysql_select_db($db2); 
    // ... 
    mysql_close($in);
    так закрывать соединение тоже пробовал, болт, всеравно все что ниже долбится во вторую базу.
    Без функции оно закрывает и первое, и второе соединение =) и по дефолту пытается долбится в локалхост.
     
  4. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    return $var;
    mysql_close(); }

    поменяй местами, потому что после return происходит выход из функции и mysql_close() уже не работает (пропускается), т.е. правильно так:

    mysql_close()
    return $var;

    return, если он один, всегда самый последний (в твоём случае)

    http://ru.php.net/return
     
    #4 Pashkela, 24 Apr 2009
    Last edited: 24 Apr 2009
  5. OdaN

    OdaN Elder - Старейшина

    Joined:
    4 Mar 2006
    Messages:
    192
    Likes Received:
    17
    Reputations:
    1
    пофк =) при вызове функции выдает
    Code:
    Warning: mysql_query() [function.mysql-query]: Access denied for user 'apache'@'localhost' (using password: NO) in /patch/index.php on line 678

    678 строчка - это следующее после функции обращение к базе. поидее должно идти к первой базе, конфиг которой указан выше вызова функции...
     
    #5 OdaN, 24 Apr 2009
    Last edited: 24 Apr 2009
  6. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    OdaN Читайте маны по функциям, которые используете, там ВСЕ написано. http://ru2.php.net/mysql_query
    Code:
     resource mysql_query  ( string $query  [, resource $link_identifier  ] )
    
    link_identifier
    
        The MySQL connection. If the link identifier is not specified, 
    the last link opened by mysql_connect() is assumed. If no such link
     is found, it will try to create one as if mysql_connect() was called
     with no arguments. If by chance no connection is found or
     established, an E_WARNING level error is generated.
    Аналогично для mysql_select_db

    Как пример
    PHP:
    $lnk1=mysql_connect(тра-та-та первое соединение);
    mysql_select_db('таблица',$lnk1);
    $lnk2=mysql_connect(второе соединение);
    mysql_select_db('sssss',$lnk2);
    Поэтому второй параметр лучше указывать всегда и везде, ибо последний дескриптор он и будет последним, не важно вызван ли он в другой области видимости или нет
     
    _________________________
    1 person likes this.
  7. OdaN

    OdaN Elder - Старейшина

    Joined:
    4 Mar 2006
    Messages:
    192
    Likes Received:
    17
    Reputations:
    1
    Gifts, спасибо =)