Не правильное обращение к разным Бд

Статус
В этой теме нельзя размещать новые ответы.

x714

Создатель
Регистрация
23 Фев 2009
Сообщения
18
Реакции
2
Здравствуйте, уважаемые форумчане!
Столкнулся с не преодолимой для меня проблемой, при разработки CSM-ки.
Суть вопроса такова:
Имеется 3 конекта к базам:
PHP:
//------------ Data Base connected ----------//
$db_s = new db;
$result = $db_s->query(SERVER_ALL);
while ($row = $db_s->get_row($result)) {
    $db_ls[$row['id']] = new db($row['ls_user'], $row['ls_pass'], $row['ls_datebase'], $row['ls_host']);
    $db_gs[$row['id']] = new db($row['gs_user'], $row['gs_pass'], $row['gs_datebase'], $row['gs_host']);
}
var_dump($db_s) выводит правильную инфу о переменных, однако при запросе к первым двум бд ($db_s и $db_ls[$row['id']]) все время обращается к третьей ($db_gs[$row['id']])
Вид запросов:
PHP:
$result = $db_s->query(NEWS);
	while ( $row = $db_s->get_row($result) ) {
Ну и собственно ошибка:
Код:
The Error returned was:
Table 'ae.ap_news' doesn't exist
На всякий случай:
Код:
База $db_s -> aportal
База $db_ls[$row['id']] -> alogin
База $db_gs[$row['id']] -> ae

Добавлено через 48 секунд
Забыл добавить, вот класс базы данных:

PHP:
class db
{
	var $db_id = false;
	var $db = false;
	var $query_num = 0;
	var $query_list = array();
	var $mysql_error = '';
	var $mysql_version = '';
	var $mysql_error_num = 0;
	var $mysql_extend = "MySQL";
	var $MySQL_time_taken = 0;
	var $query_id = false;

	function db($db_user=DBUSER, $db_pass=DBPASS, $db_name=DBNAME, $db_host=DBHOST, $show_error=1)
	{ 
		$this->host = $db_host;
		$this->user = $db_user;
		$this->pass = $db_pass;
		$this->dbname = $db_name;
		
		if(!$this->db_id = @mysql_connect($db_host, $db_user, $db_pass)) {
			if($show_error == 1) {
				$this->display_error(mysql_error(), mysql_errno());
			} else {
				return false;
			}
		} 
		if(!@mysql_select_db($db_name, $this->db_id)) {
			if($show_error == 1) {
				$this->display_error(mysql_error(), mysql_errno());
			} else {
				return false;
			}
		}
		$this->mysql_version = mysql_get_server_info();
		if(!defined('COLLATE'))
		{ 
			define ("COLLATE", "cp1251");
		}
		if (version_compare($this->mysql_version, '4.1', ">=")) mysql_query("/*!40101 SET NAMES '" . COLLATE . "' */");
		$this->db = true;
		return true;
	}
	
	function query($query, $show_error=true)
	{
		$time_before = $this->get_real_time();
		if(!$this->db) $this->db($this->user, $this->pass, $this->dbname, $this->host);
		if(!($this->query_id = mysql_query($query, $this->db_id))) {
			$this->mysql_error = mysql_error();
			$this->mysql_error_num = mysql_errno();
			if($show_error) {
				$this->display_error($this->mysql_error, $this->mysql_error_num, $query);
			}
		}
		$this->MySQL_time_taken += $this->get_real_time() - $time_before;
		$this->query_num ++;
		return $this->query_id;
	}
	
	function get_row($query_id = '')
	{
		if ($query_id == '') $query_id = $this->query_id;
		return @mysql_fetch_assoc($query_id);
	}

	function get_affected_rows()
	{
		return mysql_affected_rows($this->db_id);
	}

	function get_array($query_id = '')
	{
		if ($query_id == '') $query_id = $this->query_id;

		return mysql_fetch_array($query_id);
	}
	
	function super_query($query, $multi = false)
	{
		if(!$multi) {
			$this->query($query);
			$data = $this->get_row();
			$this->free();			
			return $data;

		} else {
			$this->query($query);
			$rows = array();
			while($row = $this->get_row()) {
				$rows[] = $row;
			}
			$this->free();			
			return $rows;
		}
	}
	
	function num_rows($query_id = '')
	{
		if ($query_id == '') $query_id = $this->query_id;
		return mysql_num_rows($query_id);
	}
	
	function insert_id()
	{
		return mysql_insert_id($this->db_id);
	}

	function get_result_fields($query_id = '') {
		if ($query_id == '') $query_id = $this->query_id;
		while ($field = mysql_fetch_field($query_id))
		{
            $fields[] = $field;
		}
		return $fields;
   	}

	function safesql( $source )
	{
		if(!$this->db_id) $this->db($this->user, $this->pass, $this->dbname, $this->host);
		if ($this->db_id) return mysql_real_escape_string ($source, $this->db_id);
		else return addslashes($source);
	}

	function free( $query_id = '' )
	{
		if ($query_id == '') $query_id = $this->query_id;
		@mysql_free_result($query_id);
	}

	function close()
	{
		@mysql_close($this->db_id);
	}

	function get_real_time()
	{
		list($seconds, $microSeconds) = explode(' ', microtime());
		return ((float)$seconds + (float)$microSeconds);
	}	

	function display_error($error, $error_num, $query = '')
	{
		echo '<?xml version="1.0" encoding="iso-8859-1"?>
		<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
		<html xmlns="http://www.w3.org/1999/xhtml">
		<head>
		<title>MySQL Fatal Error</title>
		<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
		<style type="text/css">
		body {
			font-family: Verdana, Arial, Helvetica, sans-serif;
			font-size: 10px;
			font-style: normal;
			color: #000000;
			margin: 10px auto;
			width: 500px;
			height: 200px; 
		}
		</style>
		</head>
		<body>
			<font size="4" color=red>MySQL Error!</font> 
			<br />------------------------<br /><br />
			<u>The Error returned was:</u> 
			<br /><strong>'.$error.'</strong><br /><br />
			</strong><u>Error Number:</u> 
			<br /><strong>'.$error_num.'</strong><br /><br />
			<textarea name="" rows="10" cols="52" wrap="virtual">'.$query.'</textarea><br />
		</body>
		</html>';
		exit();
	}
}

Добавлено через 2 минуты
Ах да и не говорите типа: Table 'ae.ap_news' doesn't exist, я знаю что это означает! Вы прочитайте внимательно суть вопроса, обращаешься к 1ой бд а идет запрос к 3ей
 
Проверь третий парамтер $db_name конструктора, скорее всего у тебя передается null, он и берет значение по умолчанию, т.е. твою константу DBNAME
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху