PDA

Просмотр полной версии : Соединение с базой.


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


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

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


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


$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, попробуй сделать так (на случай, если соединение не закрыватеся), но это врядли:

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

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

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

OdaN
24.04.2009, 14:39
нет, в запросах нету ошибок,

$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

Как пример$lnk1=mysql_connect(тра-та-та первое соединение);
mysql_select_db('таблица',$lnk1);
$lnk2=mysql_connect(второе соединение);
mysql_select_db('sssss',$lnk2);


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

OdaN
25.04.2009, 14:21
Gifts, спасибо =)