webForumDet fria alternativet

Problem med aktiva DB anslutningar

PHP

4 svar · 748 visningar · startad av Gimbo

Medlem sedan dec. 20001 626 inlägg
Frågan#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();
    }
Medlem 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.

Medlem 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.

Medlem 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?

Medlem 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.

257 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)