php - 由于未知原因无法建立与服务器的链接

标签 php mysql class object database-connection

我有点困惑,我真的需要对代码有一些新的看法:)
这是我的翻译功能:

function __($string) {
    isset($_SESSION['lang']) ? $lang = $_SESSION['lang'] : $lang = DEFAULT_LANG;
    $oDb = new Model_Database('translations');
    $aLang = $oDb->getById($string);
    return $aLang[$lang];
}

这是它使用的Model_Database:

class Model_Database {

   static private $connection = '';
   private $aConfig;
   private $sTable;

   public function __construct($sTable = '') {
       $this->aConfig = Core_Config::GetConfigArray('database');
       if(empty(self::$connection)) {
           self::$connection = mysql_connect($this->aConfig['host'], $this->aConfig['user'], $this->aConfig['pass']);
       }
       mysql_select_db($this->aConfig['db'], self::$connection);
       $this->sTable = TABLE_PREFIX . $sTable;
    }

    public function getById($id) {
        $query = 'SELECT * FROM `' . $this->sTable . '` WHERE `id` = "' . $id . '"';
        $result = mysql_fetch_array(mysql_query($query));
        return $result;
    }

    public function getByAny($column, $value) {
        $query = 'SELECT * FROM `' . $this->sTable . '` WHERE `' . $column . '` = "' . $value .'"';
        $result = mysql_fetch_array(mysql_query($query));
        return $result;
    }

    public function __destruct() {
        if( gettype(self::$connection) == "resource") {
            mysql_close(self::$connection);
        }
        self::$connection = '';
    }
}

这是也使用数据库的Model_Login:

class Model_Login {

    private $oDatabase;

    public function __construct() {
        $this->oDatabase = new Model_Database('users');
    }

    public function login($login, $password) {
        $aUser = $this->oDatabase->getByAny('login', $login);
        if(md5($password) == $aUser['password']) {
           $_SESSION['login'] = $login;
           $_SESSION['password'] = md5($password);
           return true;
        }
        else
            return false;

    }
}

问题是,当我尝试在负责登录的文件中使用翻译功能时,出现错误用户'ODBC'@'localhost'访问被拒绝 无法建立到服务器的链接
起初,我在关闭和打开新连接以及登录工作时遇到问题,但翻译却没有。所以我找到了将连接记住为静态变量的解决方案。翻译开始工作,但登录停止。
有什么建议吗?
编辑:当我单击“登录”时会出现错误,该“登录”创建新的Model_Login并调用方法login()
编辑2:如果您需要更多代码来重现错误,我什至可以共享整个项目,如您所见,它处于早期构建阶段,只是实现基本功能。当然,如果需要的话,我可以发布更多代码,只需指定您需要什么来帮助我:)

最佳答案

我在等待的时候就这样解决了:
1.我在数据库类中添加了这个方法

public function checkConnection() {
        if( gettype(self::$connection) != "resource") {
            self::$connection = mysql_connect($this->aConfig['host'], $this->aConfig['user'], $this->aConfig['pass']);
            mysql_select_db($this->aConfig['db'], self::$connection);
        }

    }

2.我将此方法添加到第一行中的所有其他方法中。

解决方案有效,但不是很“漂亮”,您知道有更好的方法吗?

编辑:我找到了更简单的解决方案。
我制作了 closeConnection() 方法,并将其添加到我的 index.php 的末尾(整个网站作为一个应用程序运行),而不是 checkConnection() ,一切都通过 index.php)。还从数据库类中删除了析构函数。这是代码,希望有人能学习我的错误:) :

public static function closeConnection() {
    if( gettype(self::$connection) == "resource") {
        mysql_close(self::$connection);
        self::$connection = '';
    }
}

关于php - 由于未知原因无法建立与服务器的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20622650/

相关文章:

javascript - 删除 json_encode 中的双引号

php - 使用 PHP 和 SQL 将数据库中的信息插入下拉列表菜单

php - 无法从表中获取所有用户名

javascript - 当div来自while循环时如何隐藏它

mysql - 在 woocommerce 数据库中手动输入订单?

类中的 C++ 对象构造

mysql - 有没有办法按出现频率对 mysql 行进行排序?

php - 如何从 html 表单操作调用 php 函数?

c++ - 类指针错误 : does not have a type

仅适用于 Windows 上的 Safari 的 CSS 类