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