我面临着一个我不知道如何解决的问题。让我们开始解释:
我有以下课程:
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连接,并且每个实例可以访问不同的数据库,这样每个实例都将显示来自不同数据库的数据。问题是数据的动态加载。
提前感谢
发布于 2016-09-27 09:27:02
你解决不了它。
但是这个脚本无法访问实例的mysql_dbcon变量,因为它是一个独立的脚本执行
一点儿没错。句号。您正在启动一个完全不同的PHP脚本,它与前面的脚本完全没有任何共享。事实上,当浏览器启动AJAX请求时,“现有”MySQL连接将被拆除并关闭,因为整个PHP脚本已经停止。
"myscript.php“只需打开一个新的连接。不能将连接序列化为会话;不能以序列化形式表示数据。这是与其他两个独立的PHP文件完全相同的机制,涉及include和AJAX这一事实并没有改变什么。
发布于 2016-09-27 09:48:01
将MySQL连接存储在$_SESSION中以便所有脚本都可以访问它是正确的吗?
不是的。
我正面临着一个问题
你可能不是,或者至少这不是你认为的问题。您可能没有理由尝试在脚本之间“共享”相同的数据库连接,即使可以。如果您提供了更多关于为什么要访问相同连接的上下文,则可以提供进一步的建议。也许有更好的方法来实现你想要的。
也许您试图在不同的地方访问一个查询的结果集,在这种情况下,答案将不是试图共享一个连接,而是可能是传递结果集本身。
关于语法的附加说明
class MyClass {
function MyClass($mysql_dbcon) {看起来您正在为构造函数使用过时的PHP 4语法。有关现代标准,请参阅PHP 5中的构造函数上的手动条目。
使用public/protected/private关键字定义类成员的可见性也是很好的做法。请参阅可见性上的手动条目。
https://stackoverflow.com/questions/39720833
复制相似问题