Я столкнулся с проблемой, которую не знаю, как решить. Давайте начнем объяснять:
У меня есть следующий класс:
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, и каждый экземпляр может иметь доступ к разным базам данных, поэтому каждый экземпляр будет показывать данные из разных баз данных. Проблема заключается в динамической загрузке этих данных.
заранее спасибо
Вы не можете решить это.
но этот скрипт не может получить доступ к переменной экземпляра mysql_dbcon из-за его независимого исполнения
Именно так. Период. Вы запускаете совершенно другой PHP-скрипт, который абсолютно ничего не разделяет с предыдущим. Фактически, к тому времени, когда браузер инициирует запрос AJAX, «существующее» соединение MySQL уже будет разорвано и закрыто, так как весь PHP-скрипт уже остановлен.
«myscript.php» просто должен будет открыть новое соединение. Вы не можете сериализовать соединение в сеанс; это не данные, которые могут быть представлены в сериализованной форме. Это точно такой же механизм, как и любые другие два независимых файла PHP, тот факт, что include
и AJAX задействованы, ничего не меняет.
Правильно ли хранить соединение MySQL в $ _SESSION, чтобы все сценарии могли получить к нему доступ?
Нет.
У меня проблема
Вы, вероятно, нет, или, по крайней мере, это не та проблема, о которой вы думаете. Вероятно, у вас нет причин пытаться «разделить» одно и то же соединение с базой данных между сценариями, даже если бы вы могли. Если вы предоставите больше информации о том, почему вы хотите получить доступ к тому же соединению, то вам могут быть предоставлены дополнительные советы. Вероятно, есть лучший способ добиться того, чего вы хотите.
Возможно, вы пытаетесь получить доступ к результирующему набору одного запроса в разных местах, и в этом случае ответом будет не попытка поделиться соединением, а, вероятно, передача самого результирующего набора.
Дополнительная заметка о вашем синтаксисе
class MyClass {
function MyClass($mysql_dbcon) {
Похоже, вы используете устаревший синтаксис PHP 4 для своих конструкторов. См. Руководство пользователя на конструкторы в PHP 5 для современного стандарта.
Хорошей практикой также является определение видимости ваших учеников с помощью public
/protected
/private
ключевые слова. См. Руководство пользователя на видимость.