Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP类-为每个实例存储MySQL连接_Php_Mysql_Ajax_Class_Instances - Fatal编程技术网

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

PHP类-为每个实例存储MySQL连接,php,mysql,ajax,class,instances,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脚本进行通信。由

我正面临一个我不知道如何解决的问题。让我们开始解释:

我有以下课程:

class MyClass{

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

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

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

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

$i2 = new Myclass($dbcon2);
$i2->execute();
两个实例都将执行一个Ajax函数,该函数调用其他处理脚本,但这些脚本无法访问实例的mysql_dbcon变量,因为它们是独立的脚本执行

我怎样才能解决这个问题?将MySQL连接存储在
$\u会话
中以便所有脚本都可以访问它是否正确?也许是这样:

$_SESSION['instance_identifier'] = $this->mysql_dbcon;
我想要实现的目标

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

提前感谢

您无法解决它

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

没错。时期您正在启动一个完全不同的PHP脚本,它与以前的脚本完全没有任何相同之处。事实上,当浏览器启动AJAX请求时,“现有”MySQL连接已经被破坏并关闭,因为整个PHP脚本已经停止

“myscript.php”只需打开一个新连接即可。不能将连接序列化到会话中;它不是可以以串行形式表示的数据。这与任何其他两个独立的PHP文件的机制完全相同,
include
和AJAX所涉及的事实不会改变任何东西

另请参见您无法解决的问题

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

没错。时期您正在启动一个完全不同的PHP脚本,它与以前的脚本完全没有任何相同之处。事实上,当浏览器启动AJAX请求时,“现有”MySQL连接已经被破坏并关闭,因为整个PHP脚本已经停止

“myscript.php”只需打开一个新连接即可。不能将连接序列化到会话中;它不是可以以串行形式表示的数据。这与任何其他两个独立的PHP文件的机制完全相同,
include
和AJAX所涉及的事实不会改变任何东西

也看到

将MySQL连接存储在$\u会话中以便所有脚本都可以访问它是否正确

没有

我面临一个问题

你可能不是,或者至少这不是你认为的问题。您可能没有理由尝试在脚本之间“共享”相同的数据库连接,即使可以。如果您提供更多关于为什么要访问同一连接的上下文,则可以提供进一步的建议。也许有更好的方法来实现你想要的

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


有关语法的附加说明

class MyClass {

    function MyClass($mysql_dbcon) {
看起来您正在为构造函数使用过时的PHP4语法。有关现代标准,请参见上的手动输入

使用
public
/
protected
/
private
关键字定义类成员的可见性也是一种很好的做法。请参阅上的手动输入

将MySQL连接存储在$\u会话中以便所有脚本都可以访问它是否正确

没有

我面临一个问题

你可能不是,或者至少这不是你认为的问题。您可能没有理由尝试在脚本之间“共享”相同的数据库连接,即使可以。如果您提供更多关于为什么要访问同一连接的上下文,则可以提供进一步的建议。也许有更好的方法来实现你想要的

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


有关语法的附加说明

class MyClass {

    function MyClass($mysql_dbcon) {
看起来您正在为构造函数使用过时的PHP4语法。有关现代标准,请参见上的手动输入


使用
public
/
protected
/
private
关键字定义类成员的可见性也是一种很好的做法。请参阅上的手动输入。

您应该将逻辑从“myscript.php”移动到类方法中,如果有一个方法包含另一个具有附加逻辑的文件,则没有任何意义。由于myscript.php需要mysql连接,因此可以安全地假设它不是一个html模板,而是一个包含db逻辑的脚本?为什么要管理数据库连接?每个应用程序都不能完成它的工作吗?@Nolwennig是的,它是php中构造函数的“java风格”符号,但是u构造的工作原理是相同的
函数MyClass($mysql\u dbcon)
似乎是
函数u构造($mysql\u dbcon)
?(是的,但由于PHP5.3.3,与命名空间类名的最后一个元素同名的方法将不再被视为构造函数。)感谢@d3cimaYou应该将逻辑从“myscript.PHP”移动到类方法中,如果有一个方法包含另一个带有附加逻辑的文件,则没有任何意义。由于myscript.php需要mysql连接,因此可以安全地假设它不是html