Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Dove chiudo la connessione MYSQLI?

    Ciao a tutti
    non avendo mai provato mysqli (ad oggetti)
    abbiamo fatto una clsse Prodotto che apre il database mysql e ritorna il risultato della query per poi visualizzare ii records.

    Tutto benissimo fino alla chiusura della connsessione mysql.
    Il manuale dice che __destruct() va chiamato esplicitamente e noi lo abbiamo fatto mettendoo la chiamata in vari punti ma non riusciamo ad individuare il punto dove metterla in quanto genere comunque un errore
    tipo:
    Warning: mysqli::close() [mysqli.close]: Couldn't fetch mysqli in /web/htdocs/www.libri pertutti.it/home/prodotto.class.php on line 32
    La domanda è quando, come e dove dobbiamo chiudere il database?
    <?php
    // load configuration file
    require_once('config.php');
    // start session
    session_start();

    class Prodotto
    {
    public $result;


    // class constructor
    function __construct()
    {
    // create the MySQL connection
    $this->mMysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD,DB_DATABASE);
    }

    // class destructor, closes database connection
    function __destruct()
    {
    $this->mMysqli->close();
    }
    public function readPage($db,$sub)
    {
    // create the SQL query that returns a page of products
    $queryString = "SELECT * FROM $db where sub like '%$sub%'";
    // execute the query
    if (!$result = $this->mMysqli->query($queryString))
    {echo $queryString;}
    return $result;
    }
    // end class prodotti
    }
    $tabella="libri";
    $sub="cartoni";
    $prodotto=new Prodotto();
    $result=$prodotto->readPage($tabella,$sub);
    while ($riga = $result->fetch_assoc())
    {display dei libri}
    $result->close();
    $prodotto->__destruct();
    ?>

    Grazie

  2. #2
    Ti suggerisco di rileggere il manuale ufficiale:

    http://www.php.net/manual/en/language.oop5.decon.php
    PHP 5 introduces a destructor concept similar to that of other object-oriented languages, such as C++. The destructor method will be called as soon as all references to a particular object are removed or when the object is explicitly destroyed or in any order in shutdown sequence.
    NON c'è scritto che il metodo __destruct() va richiamato esplicitamente. C'è scritto che verrà richiamato (tra gli altri casi) quando l'oggetto è distrutto esplicitamente.

    Per capire cosa significa, confronta l'esempio Example #2 Destructor Example con questo codice:

    Codice PHP:
    <pre>
    <?php
    class MyDestructableClass {
       function 
    __construct() {
           print 
    "In constructor\n";
           
    $this->name "MyDestructableClass";
       }

       function 
    __destruct() {
           print 
    "Destroying " $this->name "\n";
       }
    }

    $obj = new MyDestructableClass();
    $obj null;
    print(
    "This is the end!");
    ?>
    </pre>

  3. #3
    Quindi se nel posto della riga:
    $prodotto->__destruct();
    metto
    $prodotto=null;
    il sistena chiama automaticamente il parent::__destruct();

  4. #4
    Un'altra cosa:
    $result è una variabile public della classe Prodotti che viene valorizzata dalla public function readPage($db,$sub).
    $result però se non lo ritorno non è visibile
    Infatti per usarlo nella pagina devo scrivere :
    $tabella="libri";
    $sub="cartoni";
    $prodotto=new Prodotto();
    $result=$prodotto->readPage($tabella,$sub);

    chiedo:

    in che altri modi posso rendere visibile $result al di fuori della classe che lo valorizza?

  5. #5

  6. #6
    Originariamente inviato da filippo.toso
    Continua a suggerirti di leggere il manuale ufficiale:

    http://www.php.net/manual/en/languag...visibility.php
    Si grazie l'ho letto e ho cercato di applicrne i canoni ma la mia variabile pubblica $result fuori dalla classe continua a non essere visibile.
    per es:
    $prodotto=new Prodotto();
    $prodotto->readPage($dbf,$sub_tipo);
    while ($riga = $prodotto->$result->fetch_assoc())
    {
    fatal error

    .............e per renderla visibile devo restituirla con un return $result in uscita dal metodo readPage() ma così facendo non è + OOP

    <?php
    // load configuration file
    require_once('config.php');
    // start session
    session_start();
    // includes functionality to manipulate the products list
    class Prodotto
    {
    //variabili pubbliche
    public $result;
    // database handler
    private $mMysqli;

    // class constructor
    function __construct()
    {
    // create the MySQL connection
    $this->mMysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD,DB_DATABASE);
    }

    // class destructor, closes database connection
    function __destruct()
    {
    $this->mMysqli->close();
    }

    public function readPage($db,$sub)
    {
    // create the SQL query that returns a page of products
    $queryString = "SELECT * FROM $db where sub_tipo like '%$sub%'";
    // execute the query
    if (!$result = $this->mMysqli->query($queryString))
    {echo $queryString;}
    return $result;// con questo return ho la variabile $result fuori dalla classe ma non è + OOP
    }
    // end class prodotti
    }
    ?>

  7. #7
    Originariamente inviato da ctpp
    Si grazie l'ho letto e ho cercato di applicrne i canoni ma la mia variabile pubblica $result fuori dalla classe continua a non essere visibile.
    Prova a guardare bene ... avvicinati ancora di più allo schermo ... nell'esempio Example #1 Member declaration, come accede il codice alla variabile chiamata 'public'?

    Il metodo usato è lo stesso del tuo codice?

    Prima di rispondere di si, ti prego di fare un respiro profondo e di leggere ad alta voce il codice del manuale ufficiale ed il tuo.

    Sono certo che alla fine comprenderai.

  8. #8
    Originariamente inviato da filippo.toso
    Prova a guardare bene ... avvicinati ancora di più allo schermo ... nell'esempio Example #1 Member declaration, come accede il codice alla variabile chiamata 'public'?

    Il metodo usato è lo stesso del tuo codice?

    Prima di rispondere di si, ti prego di fare un respiro profondo e di leggere ad alta voce il codice del manuale ufficiale ed il tuo.

    Sono certo che alla fine comprenderai.
    scusami Filippo,
    ancora un po' di pazienza
    Per ora l'unico cambiamento logico che mi viene da fare dopo aver riletto il manuale per l'ennesima volta ad alta voce è di aggoiungere $this davanti a $result nella funzione readPage
    if (!$this->$result = $this->mMysqli->query($queryString))

    ma mi risponde
    Fatal error: Cannot access empty property in

    /web/htdocs/www.pincopallino.it/home/prodotto.class.php on line 33 che è la linea di cui sopra

  9. #9
    Non c'è proprio sperenza ...

    $this->$result E' DIVERSO DA $this->result

  10. #10
    Originariamente inviato da filippo.toso
    Non c'è proprio sperenza ...

    $this->$result E' DIVERSO DA $this->result
    sono complòetamente scimunita

    Adesso ho capito come si fa

    Ma non ho affatto capito il perchè si faccia così

    Se la variabile public dichiarata è $result perchè deve perdere la $ per essere riconosciuta?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.