MYSQL - To many connections

  • Hallo mensen,


    ik krijg regelmatig de foutmelding To many Connection,


    nu lees ik dat je de query moet afsluiten met


    mysql_close();


    nu is mijn vraag moet ik dit na elke mysql query doen?


    CONFIG BESTAND



    PHP: config.php
    define ('hostnameorservername','....'); //Your server name or hostname goes in here
    define ('serverusername','...'); //Your database username goes in here
    define ('serverpassword','....');  //Your database password goes in here
    define ('databasenamed','....');  //Your database name goes in here
    global $connection;
    $connection = @mysql_connect(hostnameorservername,serverusername,serverpassword) or die('Kleine storing EXCUUS');
    @mysql_select_db(databasenamed,$connection) or die('Kleine storing EXCUUS');
  • Verwijder of comment de voorkomens van mysql_close() en kijk dan of het probleem nog speelt.


    En nee, het is niet de bedoeling dat je na elke query de connectie verbreekt en weer opnieuw opbouwt als je een andere query wilt uitvoeren. Waar heb je dat gehoord? :)


    Idealiter maak je ook één keer een connectie gedurende de uitvoer van je scripts. Dus een eenmalige aanroep van een connect-functie aan het begin van je script zou voldoende moeten zijn. Indien al je scripts klaar zijn met hun executie wordt de connectie automatisch (en impliciet) verbroken. Dit hoef je eigenlijk zelden of nooit expliciet (door middel van een close-functie) te doen eigenlijk.


    Voor het probleem wat je ondervindt maakt het volgens mij niet uit dat je meerdere keren een connectie maakt omdat PHP zelf wel zo slim is dat als de parameters waarmee je een connectie maakt (host, username, password, database) hetzelfde zijn, PHP een bestaande connectie met dezelfde parameters hergebruikt. Tenzij je dus expliciet elke keer de verbinding verbreekt met behulp van mysql_close(); je connectie is dan echt weg. Het opbouwen van een connectie is een vrij dure operatie, dus dit doe je idealiter zo min mogelijk.


    Ook lijkt het mij verstandig dat je overstapt naar MySQLi of PDO, want de oorspronkelijke MySQL-driver (dit zijn effectief alle mysql_...-functies) is al ~10 jaar verouderd en is verdwenen in PHP 7.

  • Je hebt gelijk dat MySQL geen lib meer kan zijn anno 2016!
    Maar met MySQLi heb ik dit probleem zelf nog nooit meegemaakt, maar achter elke query een mysql_close(); is niet slim nee. Je kan 't best sluiten na je alle query's hebt voltooid. (Zo doe ik het in iedergeval. )

  • Je kan 't best sluiten na je alle query's hebt voltooid.

    Dit moment staat niet altijd vantevoren vast.


    Er is zelden tot nooit zoiets als "het beste". Het beste wat je kunt doen is de voors en tegens tegen elkaar afwegen. Op het moment dat alle code is uitgevoerd wordt de connectie sowieso impliciet gesloten. Dit is vaak een kwestie van milliseconden, dus waarom zou je dit moment nog verder naar voren willen halen?


    Overigens zul je volgens mij meer "performance" winst (in termen van resources) boeken als je tussentijds query-resultaten vrijgeeft.


    Ik ben eigenlijk nog nooit een situatie tegengekomen dat het nodig was dat je een connectie expliciet (en mogelijk voortijdig?) sluit.


    Als je gebruik gaat maken van transacties dan is het trouwens overduidelijk niet de bedoeling dat je de connectie tussentijds sluit omdat dat dan de "ondeelbaarheid" van opeenvolgende queries (in de transactie) niet gegarandeerd kan worden.


    TL;DR het tussentijds sluiten van een connectie na het uitvoeren van een query is onzinnig en zou vermeden moeten worden.

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!