Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Класс для работы с несколькими mysql 
:(
    Опции темы
Zmiuko
Дата 31.5.2010, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Вопрос такой.

Работаю с mysql базой. Написал собственный класс. 
Код

    class Sql {
          
            var $conn; 
            var $host;
            var $user;
            var $pass;
            var $db;
            var $code;
            var $result;
            var $lastid;

            // Constructor
            function Sql($host, $user, $pass, $db, $code='utf8') {
    
                    $this->host=$host;
                    $this->user=$user;
                    $this->pass=$pass;
                    $this->db=$db;
                    $this->conn = @mysql_connect($this->host, $this->user, $this->pass);
                    @mysql_select_db($this->db, $this->conn);
                    mysql_query("SET NAMES '".$code."'");
    
                } 

            // Perform query
            function query($query) {
    
                    if(!$this->result = @mysql_query($query, $this->conn)) {
                            return false;
                        } else { return true; }
                }

            // Perform count_
            function count_($result) {
                    return @mysql_result($this->result, 0);
                }

            // Count rows
            function count_rows($result) {
                    return @mysql_num_rows($this->result);
                }

            // Fetch row
            function fetch_row() {
                    return @mysql_fetch_array($this->result, MYSQL_ASSOC);
                }
    
            // Get the id for the last inserted row
            function get_id() {
                    $this->lastid = @mysql_insert_id($this->conn);
                    return  $this->lastid;
                }

            function dbarray($result) {
                    return @mysql_fetch_assoc($this->result);
                }
                
            function disconnect($result) {
                    return @mysql_close($this->result);
                }

            //End of the class
        }


Проблема в следующем.

1 скрипт
$_a = new Sql('localhost', 'root', '',  'table1', 'utf8');
много-много циклов - работает идеально

2 скрипт
$_w = new Sql('localhost', 'root', '',  'table2', 'cp1251');
много-много циклов - работает идеально

НО!

Работаю к примеру с $_a, произвожу выборку из таблицы. Затем мне необходимо сверить данные из нее с данными в таблице table2.

и тут выходит, что в одном скрипте 

$_a = new Sql('localhost', 'root', '',  'table1', 'utf8');
$_w = new Sql('localhost', 'root', '',  'table2', 'cp1251');

не работает...

В чем тут может быть дело?
PM MAIL WWW ICQ Skype Jabber   Вверх
Zmiuko
Дата 31.5.2010, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Имею ввиду что начиная работу с $_a = new Sql('localhost', 'root', '',  'table1', 'utf8'); - все ок.

Внутри скрипта делаю $_w = new Sql('localhost', 'root', '',  'table2', 'cp1251'); чтобы к примеру вывести потом выборку из $_w по $row из $_a , то скрипт даже $_a не показывает. Не могу понять отчего класс себя так ведет.

Добавлено через 8 минут и 48 секунд
Изменил скрипт:
Код

    class Sql {
          
            private $conn; 
            private $host;
            private $user;
            private $pass;
            private $db;
            private $code;
            private $result;
            private $lastid;

            // Constructor
            public function __construct ($host, $user, $pass, $db, $code='utf8') {
    
                    $this->host=$host;
                    $this->user=$user;
                    $this->pass=$pass;
                    $this->db=$db;
                    $this->conn = @mysql_connect($this->host, $this->user, $this->pass);
                    @mysql_select_db($this->db, $this->conn);
                    mysql_query("SET NAMES '".$code."'");
    
                } 

            // Perform query
            public function query($query) {
    
                    if(!$this->result = @mysql_query($query, $this->conn)) {
                            return false;
                        } else { return true; }
                }

            // Perform count_
            public function count_($result) {
                    return @mysql_result($this->result, 0);
                }

            // Count rows
            public function count_rows($result) {
                    return @mysql_num_rows($this->result);
                }

            // Fetch row
            public function fetch_row() {
                    return @mysql_fetch_array($this->result, MYSQL_ASSOC);
                }
    
            // Get the id for the last inserted row
            public function get_id() {
                    $this->lastid = @mysql_insert_id($this->conn);
                    return  $this->lastid;
                }

            public function dbarray($result) {
                    return @mysql_fetch_assoc($this->result);
                }
                
            public function disconnect($result) {
                    return @mysql_close($this->result);
                }

            //End of the class
        }



Один фиг, второй экземпляр класса "гасится"...
PM MAIL WWW ICQ Skype Jabber   Вверх
нуп
Дата 31.5.2010, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


Профиль
Группа: Участник
Сообщений: 987
Регистрация: 22.6.2009
Где: Кременчуг

Репутация: нет
Всего: 33



А зачем столько объектов вызывать? Сделай 1 глобальный, и думаю твоя проблема решиться  smile 
PM MAIL   Вверх
Zmiuko
Дата 31.5.2010, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Кода больно много. Пытаюсь засунуть несколько подключений по экземплярам данного класса. Хз... не панацея... просто как мне быть?

Добавлено через 2 минуты и 41 секунду
Ну даже допустим $_a - глобальный объект

делаем $_w = $_a->sql('localhost', 'root', '', 'table2', 'cp1251');

и опять нифига не работает.

Добавлено через 5 минут и 33 секунды
Вопрос даже немного по-другому звучит. Куда теряется второй экземпляр, да еще съедает первый...? Процедурно решать проблему не хотелось бы.
PM MAIL WWW ICQ Skype Jabber   Вверх
patap
Дата 31.5.2010, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: 26
Всего: 40



ну как я понял у тебя тут проблема в том, что когда ты создаешь второй объект $_w, то соединение с БД в объекте $_a пропадает, ну точнее не пропадает, а заменяется на соединением которое использует объект $_w. 

на стадии разработки, стоит избегать подавление ворнингов и т.д @


сделай такой тест

Код

.....
public function query($query) {  // поменяй код этого метода
  $this->result = mysql_query($query, $this->conn) or die(mysql_error());                            
}
.......

$_a = new Sql('localhost', 'root', '',  'db1', 'utf8');
$_w = new Sql('localhost', 'root', '',  'db2', 'utf8');

                                                                 
$res1 = $_a->query("SELECT * FROM tabel_from_db_1"); //  


Это сообщение отредактировал(а) patap - 31.5.2010, 15:42


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
Zmiuko
Дата 31.5.2010, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Ну да, получается так.
PM MAIL WWW ICQ Skype Jabber   Вверх
Zmiuko
Дата 31.5.2010, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Выводит Table 'table2.table1' doesn't exist

Добавлено через 5 минут и 3 секунды
    $mmmmmmmm = new Sql('localhost', 'root', '', 'table1');
    $nnnnnnnnnn = new Sql('localhost', 'root', '', 'table2');
    
    $res2 = $mmmmmmmm->query("SELECT * FROM `pole123_table1` WHERE `type`='mount'");
    $res1 = $nnnnnnnnnn->query("SELECT * FROM `pole125_table2` where entry='11729' "); // 


Table 'table2.table1' doesn't exist 
PM MAIL WWW ICQ Skype Jabber   Вверх
Zmiuko
Дата 31.5.2010, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Не могу никак понять в чем дело... первый указанный класс верен. Отчего не второй экземпляр цепляет первый, понять не могу.
PM MAIL WWW ICQ Skype Jabber   Вверх
Zmiuko
Дата 31.5.2010, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Прошу помощи в написании класса, чтобы в двух и более объектах шли разные подключения к разным базам. ((
PM MAIL WWW ICQ Skype Jabber   Вверх
gcc
Дата 31.5.2010, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



отсоединится с одной, а потом подключится к другой...

Добавлено @ 16:55
тем более только 2 запроса SELECT

Это сообщение отредактировал(а) gcc - 31.5.2010, 16:55
PM WWW ICQ Skype GTalk Jabber   Вверх
Zmiuko
Дата 31.5.2010, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Но если тоже самое повторить процедурно, то дисконнекта не требуется, все работает. Может я допускаю в классе какую оплошность?
PM MAIL WWW ICQ Skype Jabber   Вверх
patap
Дата 31.5.2010, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: 26
Всего: 40



вот должно помочь

Код

$this->conn = mysql_connect($this->host, $this->user, $this->pass, true);



mysql_connect - там почитай про new_link

Это сообщение отредактировал(а) patap - 31.5.2010, 17:11


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
gcc
Дата 31.5.2010, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



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

типо:
Код

$db = new Sql();

$con1 = $db->con('bla');


а тебе все равно нужно будет отсоединятся, почему ты не можешь отсоединится, а потом переподключится?
PM WWW ICQ Skype GTalk Jabber   Вверх
Zmiuko
Дата 31.5.2010, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



И правда, помогло!..  smile 
 smile  smile  smile  smile  smile

Добавлено через 2 минуты и 16 секунд
resource mysql_connect ([string server [, string username [, string password [, bool new_link]]]])

bool new_link - верно все, не обращал никогда внимания, спасибо smile
PM MAIL WWW ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0911 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.