Люди, подскажите пожалуйста. Есть скрипт, который работает с базой, примерно так: 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 остается, и все запросы которые идут ниже долбятся туда. Как можно реализовать тихое, скромное, никому не мешающее соединение, и соответственно вывод переменной? =)
OdaN, попробуй сделать так (на случай, если соединение не закрыватеся), но это врядли: PHP: $in = @mysql_connect($server2, $user2, $pass2); @mysql_select_db($db2); // ... mysql_close($in); Пробуй: Убери функцию get_var_db2(), и пробуй без неё... Она вообще тебе нужна? Также могут быть ошибки у тебя в запросах, выложи сюда...
нет, в запросах нету ошибок, PHP: $in = @mysql_connect($server2, $user2, $pass2); @mysql_select_db($db2); // ... mysql_close($in); так закрывать соединение тоже пробовал, болт, всеравно все что ниже долбится во вторую базу. Без функции оно закрывает и первое, и второе соединение =) и по дефолту пытается долбится в локалхост.
return $var; mysql_close(); } поменяй местами, потому что после return происходит выход из функции и mysql_close() уже не работает (пропускается), т.е. правильно так: mysql_close() return $var; return, если он один, всегда самый последний (в твоём случае) http://ru.php.net/return
пофк =) при вызове функции выдает Code: Warning: mysql_query() [function.mysql-query]: Access denied for user 'apache'@'localhost' (using password: NO) in /patch/index.php on line 678 678 строчка - это следующее после функции обращение к базе. поидее должно идти к первой базе, конфиг которой указан выше вызова функции...
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); Поэтому второй параметр лучше указывать всегда и везде, ибо последний дескриптор он и будет последним, не важно вызван ли он в другой области видимости или нет