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

Тема в разделе "Как сделать...", создана пользователем x714, 9 окт 2011.

Статус темы:
Закрыта.
  1. x714

    x714 Создатель

    Регистр.:
    24 фев 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ей
     
  2. fdgfdgfh

    fdgfdgfh Создатель

    Регистр.:
    30 май 2014
    Сообщения:
    27
    Симпатии:
    5
    Проверь третий парамтер $db_name конструктора, скорее всего у тебя передается null, он и берет значение по умолчанию, т.е. твою константу DBNAME
     
Статус темы:
Закрыта.