【问题标题】:PHP Class Database Connection Scope IssuePHP 类数据库连接范围问题
【发布时间】:2010-09-13 09:44:49
【问题描述】:

对于我在 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());
    }

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

【问题讨论】:

    标签: php mysql class scope code-reuse


    【解决方案1】:

    尝试使用的变量$SQLConnection ExecuteQuery() 是在另一个范围内创建的。 (SQLMethods 函数)。

    当 PHP 脚本完成其工作或您自己关闭它(如果在该脚本中建立连接)时,连接将关闭

    您应该跳过 ExecuteQuery 中的 $SQLConnection 变量,如 php.net 文档所述

    如果未指定链接标识符,则假定为mysql_connect()打开的最后一个链接。

    【讨论】:

      【解决方案2】:

      $SQLConnection 不存在于 ExecuteQuery 方法中。

      您可以将它作为参数直接传递给ExecuteQuery,或者添加一个sqlConnection 类属性,该属性在构造函数中设置并在您的类方法中作为$this->sqlConnection 访问。

      【讨论】:

        【解决方案3】:

        你应该在你的类中声明$SQLConnection,你应该把它称为

         $this->SQLConnection
        

        而不仅仅是 $SQLConnection。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-08
          • 1970-01-01
          相关资源
          最近更新 更多