Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Соединение с базой. (https://forum.antichat.xyz/showthread.php?t=117520)

OdaN 24.04.2009 12:58

Соединение с базой.
 
Люди, подскажите пожалуйста. Есть скрипт, который работает с базой, примерно так:

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 остается, и все запросы которые идут ниже долбятся туда.
Как можно реализовать тихое, скромное, никому не мешающее соединение, и соответственно вывод переменной? =)

RESPECТ 24.04.2009 13:43

OdaN, попробуй сделать так (на случай, если соединение не закрыватеся), но это врядли:
PHP код:

$in = @mysql_connect($server2,  $user2,  $pass2); 
@
mysql_select_db($db2);
// ...
mysql_close($in); 

Пробуй:
Убери функцию get_var_db2(), и пробуй без неё... Она вообще тебе нужна?

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

OdaN 24.04.2009 14:39

нет, в запросах нету ошибок,
PHP код:

$in = @mysql_connect($server2,  $user2,  $pass2);  
@
mysql_select_db($db2); 
// ... 
mysql_close($in); 

так закрывать соединение тоже пробовал, болт, всеравно все что ниже долбится во вторую базу.
Без функции оно закрывает и первое, и второе соединение =) и по дефолту пытается долбится в локалхост.

Pashkela 24.04.2009 14:43

return $var;
mysql_close(); }

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

mysql_close()
return $var;

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

http://ru.php.net/return

OdaN 24.04.2009 15:02

пофк =) при вызове функции выдает
Код:

Warning: mysql_query() [function.mysql-query]: Access denied for user 'apache'@'localhost' (using password: NO) in /patch/index.php on line 678

678 строчка - это следующее после функции обращение к базе. поидее должно идти к первой базе, конфиг которой указан выше вызова функции...

Gifts 24.04.2009 17:14

OdaN Читайте маны по функциям, которые используете, там ВСЕ написано. http://ru2.php.net/mysql_query
Код:

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); 

Поэтому второй параметр лучше указывать всегда и везде, ибо последний дескриптор он и будет последним, не важно вызван ли он в другой области видимости или нет

OdaN 25.04.2009 14:21

Gifts, спасибо =)


Время: 00:12