webForumDet fria alternativet

Problem med aktiva DB anslutningar

4 svar · 746 visningar · startad av Gimbo

GimboMedlem sedan dec. 20001 626 inlägg
#1

Hej,

Jag har nedan kod i filen database.php som jag inkluderar längst upp i min index.php sida. I bodyn på index.php anropar jag olika php filer som ska hämta info från DBn via en qs, men det verkar som att databasen inte stängs eftersom då jag kollar aktiva connections i DBn så ökar de konstant tills de slår i taket och därefter måste jag starta om mysql databasen, Testade att lägga in <?php mysql_close() ?> längst ned i index.php koden men det hjälpte inte...

se koden nedan:

class Db
{
    private static $_pdoObject = null;

    protected static $_fetchMode = PDO::FETCH_ASSOC;
    protected static $_connectionStr = null;
    protected static $_driverOptions = array();

    private static $_username = null;
    private static $_password = null;

    /**
     * Set connection information
     *
     * @example    Db::setConnectionInfo('basecamp','dbuser', 'password', 'mysql', 'http://mysql.abcd.com');
     */
    public static function setConnectionInfo($schema, $username = null, $password = null, $database = 'mysql', $hostname = 'localhost')
    {
        if($database == 'mysql') {
            self::$_connectionStr = "mysql:dbname=$schema;host=$hostname";
            self::$_username      = $username;
            self::$_password      = $password;
        } else if($database == 'sqlite'){
            // For sqlite, $schema is the file path
            self::$_connectionStr = "sqlite:$schema";
        }

        // Making the connection blank
        // Will connect with provided info on next query execution
        self::$_pdoObject = null;
    }

    /**
     * Execute a statement and returns number of effected rows
     *
     * Should be used for query which doesn't return resultset
     *
     * @param   string  $sql    SQL statement
     * @param   array   $params A single value or an array of values
     * @return  integer number of effected rows
     */
    public static function execute($sql, $params = array())
    {
        $statement = self::_query($sql, $params);
        return $statement->rowCount();
    }
walter groupiusMedlem sedan juli 2004144 inlägg
#2

Om du ska stänga db kopplingen så ska du göra det efter varje query med kopplingen som parameter, inte sist på sidan. Dock, det ska inte behövas om servern är korrekt konfigurerad.

Det kan även vara så att du öppnar en persistent connection av misstag. Kolla upp det.

drewMedlem sedan mars 2007845 inlägg
#3

Klart man inte ska stänga DB-kopplingen efter varje query. Däremot ska man fria resultatet (free result) efter varje query som ger sånt.
Stänga kopplingen ska man göra efter sista queryn eller i cleanup() om man har en sån. IOFS så ska php stänga den själv när skriptet slutat köras men det är ändå bra att ta till vana att stänga det man öppnar.

Det där verkar vara någon serverinställning som är fel.

GimboMedlem sedan dec. 20001 626 inlägg
#4

Tack för era svar, vad skulle server inställningen vara? Misstänker också att det kan vara någon server inställning då vi flyttade server så började det bete sig så här och den har en massa connections öppna. Kan man på något sätt dumpa aktiva connections efter x-antal minuter som de är inaktiva?

GimboMedlem sedan dec. 20001 626 inlägg
#5

btw, jag har ökat antalet aktiva connections samt minnet i my.cnf filen, fast det hjälpte inte, är det någon annan server inställning som bör göras?... sitter på en windows 2008 R2 maskin med php stöd.

128 ms totalt · 3 externa anrop · v20260731065814-full.86db40fa
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)