сбой настроек подключения к мускулу при передаче ссылки на объект в конструктор

sniper_9

Новичок
сбой настроек подключения к мускулу при передаче ссылки на объект в конструктор

Всем привет. Места не хватило дописать сабж

PHP:
$a_options = array(
"host"		=>	$DBHost,
"user"		=>	$DBUser,
"pass"		=>	$DBPass,
"database"	=>	$DBName
				  );

$o_db = new DB($a_options); //создаем объект для работы с БД

//другой объект
$o_language = new Language(
							array(
									"db"	=>	&$o_db,
									"DBprefix"	=>	$DBprefix
							  	 )
						   );
.......

//сам класс и его конструктор 
class  Language{
	
	
	var $db;
	var $DBprefix;
	
	function Language($a_parameters = array()){
		
		$this->db = $a_parameters['db'];
		$this->DBprefix = $a_parameters['DBprefix'];
	}
......

При попытке использования объекта БД внутри другого класса появляется сообщение
Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost'....

Проверил: ссылка на объект не бьется внутри другого класса, а настройки - увы.
Что не правильно сделал?
 

AmdY

Пью пиво
Команда форума
в php5 объекты передаются по ссылке, так что нельзя писать
"db" => &$o_db,
но у тебя ошибка не в этом, а в Access denied for user 'ODBC'@'localhost'

-~{}~ 21.10.08 18:26:

провер значение $a_options
 

sniper_9

Новичок
$DBHost="localhost";
$DBUser="root";
$DBPass="";
$DBName="job_portal";
$DBprefix="websiteadmin_";

$a_options = array(
"host" => $DBHost,
"user" => $DBUser,
"pass" => $DBPass,
"database" => $DBName
);


настройки верны.
ошибка происходит при передаче объекта в конструктор класса. при использовании объекта вне класса Language все работает. Только что проверил.
 

Beavis

Banned
sniper_9
тебе написали что доступ к БД с таким логином/паролем запрещен! проверяй логин/пароль в месте прямо перед подключением к БД
 

sniper_9

Новичок
вот смотрите: вызываю выборку прямо перед объявлением другого класса.
PHP:
$a  = $o_db->select("select * from ".$DBprefix."ext_employers");
print_r($a);
exit;



$o_language = new Language(
							array(
									"db"	=>	$o_db,
									"DBprefix"	=>	$DBprefix
							  	 )
						   );
И результат возвращается. Чудес же не бывает.

В дополнение ко всему A link to the server could not be established
 

Gas

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

пальцем в небо - ты выполняешь такой-же запрос и внутри, но в переменной $DBprefix чёрт знает что, из-за этого обращение идёт к другой базе данных, к которой у тебя нет доступа или её вообще не существует.
 

sniper_9

Новичок
Ошибка!!!!!! при выполнении запроса:
select code from websiteadmin_languages where default_language = 1
Access denied for user 'ODBC'@'localhost' (using password: NO)

Я это все уже перепроверил. Если б дело было просто в отладке, то я бы не создавал тему.
 

Beavis

Banned
sniper_9
найди строку mysql_connect("..."); и сделай var_dump всех её параметров!
 

sniper_9

Новичок
array(4) { ["host"]=> string(9) "localhost" ["user"]=> string(4) "root" ["pass"]=> string(0) "" ["database"]=> string(10) "job_portal" }

сделал. все в порядке.
 

Beavis

Banned
ты сделал это прям перед её вызовом? попробуй выполнить просто
mysql_connect("localhost", "root", "");
 

sniper_9

Новичок
да, конечно перед вызовом.
сделал просто.

вернуло resource(9) of type (mysql link)

не здесь проблема. (

неужто никто не сталкивался с таким
 

Beavis

Banned
у тебя имя пользователя не передается в MySQL
в ошибке вместо root написано ODBC
 

sniper_9

Новичок
*****

А как же тогда успешное выполнение запроса до объявления класса language. Параметры объекта для работы с БД нигде не переопределял.
 

Beavis

Banned
сделай var_dump ресурсов mysql (сразу после коннекта и перед выполнением запроса, выдающего ошибку) и посмотри, совпадают ли их идентификаторы
 

sniper_9

Новичок
исправил)

вот начало функции select

PHP:
 function select($sql, $r=1, $type=MYSQL_ASSOC, $s_key = "") {
        if ($res = $this->request($sql)) {
.....

Далее идем в request(выделенное жирным только что дописал):

PHP:
 $res = mysql_query($sql, [b]$this->db[/b]);
        if ($res) return $res;
.....
И все заработало. Ведь оператор должен по умолчанию брать текущий линк с базой, а тут пришлось дописывать...
И такое происходит, если передаешь в конструктор класса объект с переменной класса, содержащего линк к базе. Почему так?
 
Сверху