• User

    mysqli close e free

    Ciao a tutti, sto iniziando a lavoricchiare su un sito e mi è sorto un dubbio.

    Il sito su cui sto lavorando avrà sicuramente una certa mole di utenti che faranno molte richieste di pagine al server.. perciò leggendo in giro che "si raccomanda" di chiudere e liberare.. ho pensato.. "ok, facciamolo"... ma quando mi son messo a lavorare sul codice, mi sono accorto che...

    A - la chiusura della connessione potresti farla:

    • o dopo ogni query...(come fanno in molti)
    • o praticamente a fine codice pagina... ma in quel caso.. non mi sembra utile visto che a fine pagina lo fa già da solo.

    B - il free result potresti farlo:

    • o quando hai finito di usare un certo result... il che spesso e volentieri può significare verso la fine del codice della tua pagina.
    • o a fine pagina appunto... ma come per il close.. non mi sembra utile visto che lo fa in automatico.

    Perciò... la mia domanda/dubbio era .. se ho capito male io.. o se ho capito giusto.
    Perchè magari farlo è invece utilissimo.. e sono io che non ho capito niente, nè sul come funziona, nè sul come usarlo nel codice e in questo caso, se qualcuno volesse farmi un esempio gliene sarei grato.

    Le mie domande/dubbi sarebbero queste:
    Ha senso aprire e chiudere la connessione ad ogni query della pagina? Non è gravoso per il server? (considerando che in una classica pagina php, si possono avere query alla 10° riga, alla 50° riga.. alla 65° riga.. ecc.. )
    Se è gravoso, si potrebbe chiudere solo a fine pagina... ma allora ritorno alla domanda.. se viene chiusa in automatico a fine pagina, che senso ha farlo?

    E il free result.. non è automatico alla chiusura della connessione? Se è così allora diventa inutile farlo a fine pagina, visto che a fine pagina la connessione viene chiusa in automatico.

    Allora il free result sarebbe da fare quando hai finito di usarlo all'interno della pagina. Solo che spesso e volentieri, un result viene utilizzato in più parti nella pagina, con la conseguenza che la query ce l'hai a riga 10.. e il result lo finisci di usare a 3/4 di pagina.. e li puoi liberarlo...
    ma se si libera da solo a fine pagina... dove sta il vantaggio?

    • la mia domanda è puramente generica... basandosi su un classico sito in php con db, che non abbia particolari funzioni. Visto che leggendo su internet, spesso viene raccomandato di chiudere la connessione, di liberare i result set... mi chiedevo "se" in via generica per un sito classico in php, fosse utile o meno questa cosa, in considerazione anche del fatto che a fine compilazione pagina viene chiusa la connessione e liberato il result set.

    in ultima... domanda aggiuntiva... usare per le variabili di connessione "define"
    define("HOST", "localhost");
    è una brutta cosa? ho il sospetto che potrebbe essere poco sicuro...

    Spero di essere stato chiaro, grazie a chiunque risponda


  • ModSenior

    Ciao Panda,
    chiudere la connessione manualmente a fine pagina è altamente inutile, viene già fatto in automatico.
    Farlo dopo ogni query per normali siti web, non migliora le prestazioni ma le peggiora, può avere un senso quando si ha un applicazione che tra una query e l'altra impiega vari secondi in operazioni di altro tipo, ma non è certamente il caso di un normale sito web.
    mysql_free_result ti libera un pò di memoria, ma impieghi del tempo ad eseguirla, personalmente ritengo migliore la soluzione del risparmiare sul tempo di esecuzione, perdendo un pò di memoria. Viene ovviamente liberata comunque al termine dell'esecuzione dello script, poi se utilizzi una classe che si occupa del database, la memoria molto spesso viene già liberata al termine dell'esecuzione del metodo che libera la variabile locale.

    Per quanto riguarda i dati di connessione, è indifferente utilizzare delle costanti o delle variabili, il risultato è uguale.