Странная проблема с несколькими соединениями mysql_

Я немного схожу с ума по этой проблеме. Я не могу сделать это сам, поэтому мне нужно сообщество, чтобы помочь мне решить эту проблему. Я трачу часы на это, потому что я не знал, где искать. Теперь я знаю возможное исправление, но это просто беспорядочно (читайте дальше). Мне нужен только тот, кто знает об этом больше, чем я.

Это моя ситуация:

  • Я хочу использовать 2 или более соединения mysql.
  • Я использую OOP

У меня есть класс под названием dbase, он имеет две функции: setConnection и getConnection и две переменные класса, называемые $ connection и $ dbaseName .

In my main project file I include dbase and create two objects:

  • DBase
  • maindbase

то я делаю:

$this->dbase->setConnection($server, $uname, $pword);
$this->maindbase->setConnection($server, $uname, $pword);

функция setConnection выглядит так:

function setConnection ($server, $serv_Username, $serv_Password) {
    $this->connection = mysql_connect($server, $serv_Username, $serv_Password, true);
   //echo $this->connection . "
"; }

Я повторяю его, чтобы увидеть resourcenumber и добавил true в mysql_connect (и я знаю, что он устарел с 5,5, я здесь не для этого).

Теперь, когда я понимаю ООП, переменные класса задаются для каждого объекта. Таким образом, соединение из dbase никогда не будет таким же, как maindbase (если, конечно, я не использую те же учетные данные, но даже тогда он создаст новую ссылку из-за включенной опции $ new_link). Оба они имеют разные идентификаторы ресурсов.

Моя проблема:

В классе dbase у меня также есть функция, которая выполняет такой запрос:

$connection = $this->getConnection();
$dbase_name = $this->getDbaseName();
mysql_select_db($dbase_name, $connection); 
$q = "SELECT * FROM {$table_name} WHERE {$column} LIKE '{$value}'";
$result = mysql_query($q);

Теперь, когда я использую его так, он будет ВСЕГДА использовать соединение FIRST $, которое было установлено в dbase класса, и не имеет значения, какой из этих объектов это: объект dbase или maindbase .

Я получаю эту ошибку:

Table 'testdbase1.skye_domains' doesn't exist

объект dbase подключен к testdbase1

объект maindbase подключен к testdbase2

ошибка выше, которую я получаю при попытке выбрать результаты, используя объект maindbase .

Когда я удаляю строку $ connection из mysql_select_db , она отлично работает, потому что она попытается открыть новое соединение, как если бы использовала mysql_connect.

Почему это? Это невозможно? Как объект object maindbase имеет то же $ соединение, что и объект dbase? Они находятся в NO WAY, подключенном к eachother ... Является ли PHP каким-то образом глобальной переменной mysql_connect или буфером, о котором я не знаю?

Я хотел бы продолжать использовать connectionstrings , поскольку это просто удобно и сейчас. Выход из строки $ connection кажется беспорядочным.

Есть ли у кого-нибудь какие-либо предложения, которые я могу попытаться снова сделать PHP (или мою голову)?

0
nl ja de
Почему вы все еще используете функции MySQL _ ?
добавлено автор DC_, источник
@swapnesh Не означает, что я не могу спросить.
добавлено автор DC_, источник
@DC_ ", и я знаю, что он устарел с 5,5 лет, я не здесь для этого" уже упомянутого
добавлено автор swapnesh, источник
@DC_ вы можете спросить ... просто звучит слишком громко в этом случае :)
добавлено автор swapnesh, источник
@ C-TZ, почему $ this-> dbase-> setConnection ($ server, $ uname, $ pword); ? Я думаю, что dbase - это объект, тогда вы можете использовать такой метод - $ dbase-> setConnection ($ server, $ uname, $ pword);
добавлено автор swapnesh, источник
Почему бы вам просто не использовать mysqli для ООП?
добавлено автор Alvin Wong, источник
@ DC_ keywords: использование PHP 5.3, недостаточно времени для перезаписи всего класса dbase (это большой) (также, я с того времени, когда динозавры бродили по земле), mysql_ работает отлично. Можете ли вы помочь мне исправить это? и swapnesh, любая идея?
добавлено автор C-TZ, источник
swapnesh, я использую $ this, потому что я запускаю его из __construct в другом классе с функциями, которые также используют те же объекты dbase и maindbase. Если это имеет какое-либо отношение к этому, что это может быть? В основном это так ... Я включаю класс, который имеет функции __construct и другие функции, которые используют объекты dbase и maindbase. Я включаю класс dbase в __construct.
добавлено автор C-TZ, источник
Я мог бы также использовать $ this-> dbase :: setConnection (blabla), но это не проблема.
добавлено автор C-TZ, источник
@ swapnesh, см. это сообщение, чтобы узнать, почему я использую $ this-> MySQL соединения "> stackoverflow.com/questions/978478/…
добавлено автор C-TZ, источник

1 ответы

Try to put echo $this->connection EVERYWHERE you use it. Also, create an "id" member and fill it with a unique value upon constructing a dbase-object and echo it along the value of $this->connection. This way you can track where what happens to your connection.

And check if there's maybe some place outside of the class that assigns $foo->connection. If you're not using "private" on the members, you're bound to have such problems when you e.g. forget to remove a hack or an experiment from unrelated parts of your code.

0
добавлено
Я знаю, что случилось! Вы используете mysql_query ($ q), но вы ДОЛЖНЫ ДОЛЖНЫ использовать mysql_query ($ q, $ this-> connection) ;!
добавлено автор Skynet, источник
Хе-хе, случалось слишком часто для меня: D Вот почему все рекомендуют функции mysqli_ *, они не допускают такую ​​ошибку, заставляя вас использовать идентификатор ссылки - помимо других преимуществ. Если возможно, перенесите свою библиотеку в mysqli, после приятного сна;)
добавлено автор Skynet, источник
Строка $ dbase_name несколько функционирует как идентификатор. Я повторяю это, и все в порядке. (dbase имеет testdbase1 как $ dbase_name, а maindbase имеет testdbase2 как $ dbase_name). Всего во всем проекте есть только две точки, в которых используется setConnection, и которая находится в __construct основного класса проекта, который затем включает класс dbase. Я просто дважды проверял, и у меня также есть sessionmanager, который использует mysql_connect, но у него нет NO RELATION WHATSOEVER для объектов dbase и maindbase! Даже когда я устанавливаю две переменные класса в частную, возникает одна и та же проблема. Это действительно странно.
добавлено автор C-TZ, источник
Кроме того, я использую $ this-> connection в верхней части каждой функции через getConnection, где я передаю ее локальной переменной (локально, как в, функция scope-like). Таким образом, это SUPER безопасно по отношению к вещам, которые могут испортиться с соединительной строкой.
добавлено автор C-TZ, источник
Aaaaaaaah БОГ !!!!!!! Ты спасатель ... Я все это пропустил. Я автоматически решил, что при использовании mysql_select_db правильные параметры передавались в mysql_query ... Я чувствую себя таким же идиотом прямо сейчас. Как я мог упустить такую ​​простую вещь? Может быть, это потому, что я получаю 5 часов сна, едва, каждую ночь: '). Я перепроверил руководство по указанной функции, и вы правы. Для правильной работы необходим идентификатор ссылки. Чувак (или дудэт), я люблю тебя. Ты спас свой день, я могу немного поспать.
добавлено автор C-TZ, источник
Это решило мою проблему изящно.
добавлено автор C-TZ, источник
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

MySQL
MySQL
995 участник(ов)

The group is about MySQL. For code use hastebin.com. Admin: @smlkw

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp