Класс PHP — хранить соединение MySQL для каждого экземпляра

Я столкнулся с проблемой, которую не знаю, как решить. Давайте начнем объяснять:

У меня есть следующий класс:

class MyClass{

function MyClass($mysql_dbcon){
$this->mysql_dbcon = $mysql_dbcon;
}

function execute(){
include("myscript.php");
}

}

myscript.php шаблон HTML, который использует Ajax для общения с другие сценарии PHP. Поскольку эти другие сценарии PHP не включены непосредственно в класс, я не могу получить переменную mysql_dbcon и использовать разные соединения для каждого экземпляра. Давайте предположим, что у меня есть следующие экземпляры:

$i1 = new Myclass($dbcon1);
$i1->execute();

$i2 = new Myclass($dbcon2);
$i2->execute();

Оба экземпляра будут выполнять функцию Ajax, которая вызывает другие сценарии обработки, но эти сценарии не могут получить доступ к переменной mysql_dbcon экземпляра, поскольку они выполняются независимо.

Как я могу решить это? Правильно ли хранить соединение MySQL в $_SESSION так что все скрипты могут получить к нему доступ? Может быть, это:

$_SESSION['instance_identifier'] = $this->mysql_dbcon;

Чего я хочу достичь

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

заранее спасибо

0

Решение

Вы не можете решить это.

но этот скрипт не может получить доступ к переменной экземпляра mysql_dbcon из-за его независимого исполнения

Именно так. Период. Вы запускаете совершенно другой PHP-скрипт, который абсолютно ничего не разделяет с предыдущим. Фактически, к тому времени, когда браузер инициирует запрос AJAX, «существующее» соединение MySQL уже будет разорвано и закрыто, так как весь PHP-скрипт уже остановлен.

«myscript.php» просто должен будет открыть новое соединение. Вы не можете сериализовать соединение в сеанс; это не данные, которые могут быть представлены в сериализованной форме. Это точно такой же механизм, как и любые другие два независимых файла PHP, тот факт, что include и AJAX задействованы, ничего не меняет.

Также см https://stackoverflow.com/a/13840431/476

3

Другие решения

Правильно ли хранить соединение MySQL в $ _SESSION, чтобы все сценарии могли получить к нему доступ?

Нет.

У меня проблема

Вы, вероятно, нет, или, по крайней мере, это не та проблема, о которой вы думаете. Вероятно, у вас нет причин пытаться «разделить» одно и то же соединение с базой данных между сценариями, даже если бы вы могли. Если вы предоставите больше информации о том, почему вы хотите получить доступ к тому же соединению, то вам могут быть предоставлены дополнительные советы. Вероятно, есть лучший способ добиться того, чего вы хотите.

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


Дополнительная заметка о вашем синтаксисе

class MyClass {

function MyClass($mysql_dbcon) {

Похоже, вы используете устаревший синтаксис PHP 4 для своих конструкторов. См. Руководство пользователя на конструкторы в PHP 5 для современного стандарта.

Хорошей практикой также является определение видимости ваших учеников с помощью public/protected/private ключевые слова. См. Руководство пользователя на видимость.

1

По вопросам рекламы [email protected]