PHP类 - 为每个实例存储MySQL连接

时间:2016-09-27 09:20:14

标签: php mysql ajax class instances

我遇到了一个我不知道如何解决的问题。让我们开始解释:

我有以下课程:

class MyClass{

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

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

}

myscript.php 是一个HTML模板,它使用Ajax与其他PHP脚本进行通信。由于这些其他PHP脚本没有直接包含在类I中,因此无法获取变量mysql_dbcon并为每个实例使用不同的连接。我们猜测我有以下情况:

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

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

两个实例都将执行调用其他处理脚本的Ajax函数,但这些脚本无法访问实例的mysql_dbcon变量,因为它们是独立的脚本执行。

我该如何解决这个问题?在$_SESSION中存储MySQL连接是否正确所以所有脚本都可以访问它?也许这个:

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

我想要实现的目标

我想创建一个类,开发人员可以在其中设置MySQL连接,每个实例都可以访问不同的数据库,因此每个实例都会显示来自不同数据库的数据。问题是动态加载数据。

提前致谢

2 个答案:

答案 0 :(得分:3)

你无法解决它。

  

但是这个脚本无法访问实例的mysql_dbcon变量,因为它是一个独立的脚本执行

完全。期。您正在启动一个完全不同的PHP脚本,该脚本与之前的脚本完全没有任何共享。事实上,当浏览器启动AJAX请求时,"现有的"由于整个PHP脚本已经停止,MySQL连接已经被拆除和关闭。

" myscript.php"只需要打开一个新的连接。您无法将连接序列化为会话;它不是可以序列化形式表示的数据。这与任何其他两个独立的PHP文件完全相同,include和AJAX所涉及的事实不会改变任何内容。

另见https://stackoverflow.com/a/13840431/476

答案 1 :(得分:1)

  

在$ _SESSION中存储MySQL连接是否正确所以所有脚本都可以访问它?

没有

  

我遇到了问题

你可能不是,或者至少它不是你认为的问题。您可能没有理由需要尝试分享"脚本中的数据库连接相同,即使可以。如果您提供有关您希望访问同一连接的原因的更多上下文,则可以提供进一步的建议。可能有更好的方法来达到你想要的效果。

也许您正试图在不同的地方访问一个查询的结果集,在这种情况下,答案不是尝试共享连接,而是可能传递结果集本身。

关于语法的其他说明

PREV

您似乎正在为构造函数使用过时的PHP 4语法。有关现代标准,请参阅constructors in PHP 5上的手册条目。

使用class MyClass { function MyClass($mysql_dbcon) { / public / protected关键字定义班级成员的知名度也是一种很好的做法。请参阅visibility上的手册条目。