簡體   English   中英

關閉我的MySQL連接

[英]Closing my mySQL connection

我是一位接管PHP項目的.Net開發人員。 該項目具有一個數據庫層,如下所示:

<?php

class DatabaseManager {

    private static $connection;

    const host = "projectname.mysql.hostname.se";
    const database = "databaseName";
    const username = "userName";
    const password = "password";

    public function __construct()
    {

    }

    public function instance($_host = null, $_username = null, $_password = null)
    {
        if(!self::$connection)
        {
            if(!$_host || !$_username || !$_password)
            {
                $host = self::host;
                $username = self::username;
                $password = self::password;         
            }else{
                $host = $_host;
                $username = $_username;
                $password = $_password;
            }
            self::$connection = mysql_connect($host, $username, $password);
            $this->setDatabase();
        }
        return self::$connection;
    }

    public function setDatabase($_database = null)
    {
        if(!$_database)
        {
            $database = self::database;
        }else{
            $database = $_database;
        }
        $connection = $this->instance();
        mysql_select_db($database, $connection) or die(mysql_error());  
    }
} ?>

我已經寫了一個使用此層的php文件,但過了一會兒,我得到了這些mysql錯誤,表明我沒有關閉我沒有的連接。 我嘗試關閉它們,但知道我遇到其他奇怪的錯誤,例如系統錯誤:111 非常簡單,我的php文件如下所示:

<?php
$return = new stdClass();

$uid = '9999999999999';
$return->{"myUid"} = $uid;

$dm = new DatabaseManager();
$dmInstance = $dm->instance();

/* MY CLICKS */
$sql = sprintf("SELECT count(*) as myClicks FROM clicks2011, users2011 WHERE clicks2011.uid = users2011.uid AND users2011.uid = %s AND DATEDIFF(DATE(at), '%s') = 0 AND exclude = 0", mysql_real_escape_string($uid), mysql_real_escape_string($selectedDay));
$result = mysql_query($sql, $dmInstance) or die (mysql_error());
$dbResult = mysql_fetch_row($result);
$return->{"myClicks"} = $dbResult[0];

mysql_close($dmInstance);

echo json_encode($return); ?>

好的,我將其發布為答案,因為我認為這兩種方法中的一種(可能同時適用)對您有幫助。

首先: 您不需要手動關閉MySQL連接 除非您對其進行設置以使其持久存在,否則它們將自動關閉。 除非您確定其他所有問題都不是解決方案,否則我將避免這樣做。

另外,我將切換為使用預處理語句 它更加安全,並且可以面向未來。 與mysqli相比,我更喜歡PHP的PDO,但這取決於您。

如果您想查看一個簡單的PDO對象的示例,以從創建准備好的語句和連接以及獲得結果中去除很多內容 ,那么可以看看我的自制解決方案

第二:“系統錯誤111”是MySQL錯誤。 從我閱讀的內容來看,當您在同一台服務器上使用PHP和MySQL時,通常會發生此錯誤,但告訴PHP通過IP地址連接到MySQL。 $host變量切換為'localhost' 這很可能會解決該錯誤。

這里的問題是您正在調用mysql_close而不指定有效的mysql連接資源對象。 相反,您正在嘗試關閉DatabaseManager對象的實例。

您可能要運行mysql_close(DatabaseManager :: connection); 這是DatabaseManager存儲資源對象的位置。

另外,我個人建議您學習PDO或使用mysqli驅動程序。 在將來的PHP版本中,內置的mysql函數將移至E_DEPRECATED

嘗試實施__destrcut

public function __destruct()
{
    mysql_close(self::$connection)
}

然后只需使用unset($dm);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM