我遇到了一个我不知道如何解决的问题。让我们开始解释:
我有以下课程:
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连接,每个实例都可以访问不同的数据库,因此每个实例都会显示来自不同数据库的数据。问题是动态加载数据。
提前致谢
答案 0 :(得分:3)
你无法解决它。
但是这个脚本无法访问实例的mysql_dbcon变量,因为它是一个独立的脚本执行
完全。期。您正在启动一个完全不同的PHP脚本,该脚本与之前的脚本完全没有任何共享。事实上,当浏览器启动AJAX请求时,"现有的"由于整个PHP脚本已经停止,MySQL连接已经被拆除和关闭。
" myscript.php"只需要打开一个新的连接。您无法将连接序列化为会话;它不是可以序列化形式表示的数据。这与任何其他两个独立的PHP文件完全相同,include
和AJAX所涉及的事实不会改变任何内容。
答案 1 :(得分:1)
在$ _SESSION中存储MySQL连接是否正确所以所有脚本都可以访问它?
没有
我遇到了问题
你可能不是,或者至少它不是你认为的问题。您可能没有理由需要尝试分享"脚本中的数据库连接相同,即使可以。如果您提供有关您希望访问同一连接的原因的更多上下文,则可以提供进一步的建议。可能有更好的方法来达到你想要的效果。
也许您正试图在不同的地方访问一个查询的结果集,在这种情况下,答案不是尝试共享连接,而是可能传递结果集本身。
关于语法的其他说明
PREV
您似乎正在为构造函数使用过时的PHP 4语法。有关现代标准,请参阅constructors in PHP 5上的手册条目。
使用class MyClass {
function MyClass($mysql_dbcon) {
/ public
/ protected
关键字定义班级成员的知名度也是一种很好的做法。请参阅visibility上的手册条目。