PHP类数据库连接范围问题

时间:2020-03-06 14:46:33  来源:igfitidea点击:

对于我正在PHP中执行的新项目,我创建了一个SQLMethods类以连接到数据库并执行查询。今晚是我实际进行测试的第一天(大约一个星期前我写了它,却忘记了它),并且发生了意外错误:当它调用ExecuteQuery()函数时,它将不会使用我所使用的数据库在构造函数中选择。

构造函数:

public function SQLMethods() {
        $SQLConnection = mysql_connect($SQLDBAddress, $SQLUserName, $SQLPassword);

        if (!$SQLConnection) {
            die('Could not connect: ' . mysql_error());
        }

        mysql_select_db($SQLDB, $SQLConnection);
    }

有问题的功能:

public function ExecuteQuery($Query) {
        mysql_query($Query, $SQLConnection) or die('Could not perform query: ' . mysql_error());
    }

有人知道这个问题可能是什么吗?构造函数完成后,连接是否关闭?

解决方案

我们应该在类中声明$ SQLConnection,并且应将其引用为

$this->SQLConnection

而不仅仅是$ SQLConnection。

ExecuteQuery方法中不存在$ SQLConnection`。

我们可以将其作为参数直接传递给ExecuteQuery,也可以添加在构造函数中设置并在类方法中以$ this-> sqlConnection形式访问的sqlConnection类属性。

试图使用的变量$ SQLConnectionExecuteQuery()在另一个作用域内创建。 (SQLMethods`函数)。

当PHP脚本完成工作或者我们自己关闭连接时(如果连接是在该脚本中进行的),连接将关闭。

如php.net文档所述,我们应该在ExecuteQuery中跳过$ SQLConnection变量。

If the link identifier is not specified, the last link opened by mysql_connect() is assumed.