Visualizzazione risultati 1 fino 10 di 10

Discussione: Mysqli Primi problemi!

  1. #1
    Guest

    Question Mysqli Primi problemi!

    Ciao ragazzi, eccomi di ritorno dalla prima lettura del manuale php al riguardo di MySqli!
    Naturalmente non poteva filare tutto liscio, mentre la connessione è andata buon fine, quello che mi sta dando problemi è senz'altro la dannata Disconnesisone. Naturalmente sto cercando di fare tutto attraverso una classe, sarà perchè non conosco ancora bene l'OOP ma non riesco a creare un metodo funzionante per la chiusura di mysqli!!

    Ecco a voi la mia classe:
    Codice PHP:
    // Classe per la connessione al database MySQL
    class database {

    // Proprietà della classe
    private $hostname = "localhost";
    private
    $username = "*************";
    private
    $password = "*************";
    private
    $database = "*************";

    // Metodo di connessione
    public function start_db() {
    $mysqli = new mysqli($this->hostname, $this->username, $this->password, $this->database);
    if (
    $mysqli->connect_errno) {
    echo
    "Connessione al database Mysql fallita: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    } else {
    echo
    $mysqli->host_info . "\n";
    }
    }

    // Metodo di disconnessione


    // Metodo per l'esecuzione delle query


    // Metodo per l'estrazione dei record


    // Metodo per l'inserimento dei record


    }
    Sul manuale mi dice che bisogna usare "mysqli::close" solo che non capisco in che modo! Avevo pensato a questo, ma so già che è sbagliato, è per farvi capire:
    Codice PHP:
    public function {
    mysqli::close;
    }
    Grazie in anticipo!!!

  2. #2
    Guest

    Predefinito

    Sull'esempio che hai scritto tu c'è scritto object oriented

    Prova ad usare questo

    Codice PHP:
    mysqli_close ( mysqli $link )
    preso dal sito

  3. #3
    Guest

    Predefinito

    Mh ma io sto programmando in OOP o sbaglio?
    Comunque niente non và, ho scritto:
    Codice PHP:
    // Metodo di disconnessione
    public function close_db() {
    if(
    mysqli_close($this->mysqli)) {
    echo
    "Mysql Closed!";
    } else {
    echo
    "Disconnessione al database Mysql fallita: (" . $this->mysqli->connect_errno . ") " . $this->mysqli->connect_error;
    }
    }
    Inoltre ho provato anche così:
    Codice PHP:
    // Metodo di disconnessione
    public function close_db() {
    if(
    $mysqli->close()) {
    echo
    "Chiusura del database: Succesfull";
    }
    }
    Ma mi dà questo errore:
    Codice:
    Fatal error: Call to a member function close() on a non-object in /membri/ernestocampese/include/config.inc.php on line 32
    Ultima modifica di ernestocampese : 15-08-2013 alle ore 20.38.59

  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Citazione Originalmente inviato da ernestocampese Visualizza messaggio
    Mh ma io sto programmando in OOP o sbaglio?
    Stai sbagliando, o meglio stai programmando in OOP ma non correttamente.
    Le variabili locali di un metodo di una classe, non diventano automaticamente variabili della classe (cioè non puoi accedergli con $this->nomevar).
    Inoltre, ti suggerisco di usare i metodi speciali (magic methods), in modo particolare __construct e __destruct

    Codice PHP:
    class database {

    // Proprietà della classe
    private $hostname = "localhost";
    private
    $username = "*************";
    private
    $password = "*************";
    private
    $database = "*************";
    private
    $mysqli;

    // Metodo di connessione
    public function __construct() {
    $this->mysqli = new mysqli($this->hostname, $this->username, $this->password, $this->database);
    if (
    $this->mysqli->connect_errno) {
    echo
    "Connessione al database Mysql fallita: (" . $this->mysqli->connect_errno . ") " . $this->mysqli->connect_error;
    } else {
    echo
    $this->mysqli->host_info . "\n";
    }
    }

    public function
    __destruct() {
    $this->mysqli->close();
    }


    // Metodo per l'esecuzione delle query


    // Metodo per l'estrazione dei record


    // Metodo per l'inserimento dei record


    }
    A questo punto, invochi la classe che si occuperà di aprire e chiudere la connessione al database:
    Codice PHP:
    $db = new dabatase();

    // operazioni su db
    Quando php non noterà più referenze alla tua classe nello script, chiamerà il metodo __destruct che chiuderà la connessione.
    Ultima modifica di javascripter : 15-08-2013 alle ore 21.06.51

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da javascripter Visualizza messaggio
    Stai sbagliando, o meglio stai programmando in OOP ma non correttamente.
    Le variabili locali di un metodo di una classe, non diventano automaticamente variabili della classe (cioè non puoi accedergli con $this->nomevar).
    Inoltre, ti suggerisco di usare i metodi speciali (magic methods), in modo particolare __construct e __destruct

    Codice PHP:
    class database {

    // Proprietà della classe
    private $hostname = "localhost";
    private
    $username = "*************";
    private
    $password = "*************";
    private
    $database = "*************";
    private
    $mysqli;

    // Metodo di connessione
    public function __construct() {
    $this->mysqli = new mysqli($this->hostname, $this->username, $this->password, $this->database);
    if (
    $this->mysqli->connect_errno) {
    echo
    "Connessione al database Mysql fallita: (" . $this->mysqli->connect_errno . ") " . $this->mysqli->connect_error;
    } else {
    echo
    $this->mysqli->host_info . "\n";
    }
    }

    public function
    __destruct() {
    $this->mysqli->close();
    }


    // Metodo per l'esecuzione delle query


    // Metodo per l'estrazione dei record


    // Metodo per l'inserimento dei record


    }
    A questo punto, invochi la classe che si occuperà di aprire e chiudere la connessione al database:
    Codice PHP:
    $db = new dabatase();

    // operazioni su db
    Quando php non noterà più referenze alla tua classe nello script, chiamerà il metodo __destruct che chiuderà la connessione.
    Capisco, ti ringrazio, ora andrò a ripretere questi metodi, specialmente quando usare __ construct, non mi è molto chiaro ( piccolo help )

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,266

    Predefinito

    In generale, un costruttore è un metodo speciale: viene richiamato in automatico ogni volta che istanzi un oggetto, ovvero ogni volta che usi "new Classe()".

    In PHP, per far capire che il metodo che stai scrivendo è il costruttore della classe, devi chiamarlo "__ construct".

    Stesso discorso per i distruttori, che vengono invocati
    Citazione Originalmente inviato da javascripter Visualizza messaggio
    Quando php non noterà più referenze alla tua classe nello script
    Ciao!
    Ultima modifica di alemoppo : 15-08-2013 alle ore 22.27.56 Motivo: Aggiunta quote javascripter

  7. #7
    Guest

    Predefinito

    So che ormai hai risolto, ma vorrei suggerirti di estendere Mysqli (come ti avevo già consigliato nel topic precedente). Ciò significa fare qualcosa del tipo
    Codice PHP:
    class database extends mysqli
    {
    // aggiungi ciò che vuoi
    }
    Questo ti farà già usare il costruttore e tutte le funzioni (o meglio i metodi) che ha già mysqli, più quelle che andrai a definire tu (puoi anche ridefinire quelle esistenti). Ciò significa che un semplice
    Codice PHP:
    $db = new database('localhost', 'username', 'password', 'database');
    funzionerà anche senza ridefinire il costruttore e stessa cosa per chiudere la connessione.

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    In generale, un costruttore è un metodo speciale: viene richiamato in automatico ogni volta che istanzi un oggetto, ovvero ogni volta che usi "new Classe()".

    In PHP, per far capire che il metodo che stai scrivendo è il costruttore della classe, devi chiamarlo "__ construct".

    Stesso discorso per i distruttori, che vengono invocati

    Ciao!
    Il discorso ora mi è più chiaro! Quindi ogni classe ha un costruttore, deve essere dichiarato sempre? Se no, in quale caso?

  9. #9
    Guest

    Predefinito

    Ne approfitto per farti notare il mio post precedente (nel caso non l'avessi visto).

    Se non dichiari un costruttore verrà usato quello del padre (se stai estendendo una classe), se invece stai creando una classe da zero, se non lo dichiari verrà considerato come se tu avessi scritto
    Codice PHP:
    function __construct()
    {

    }
    cioè un costrutto che non fa assolutamente nulla.
    P.s.: è tutto scritto sul manuale comunque, se sai un po' di inglese. Ah, c'è anche l'extends, se sei interessato.

  10. #10
    Guest

    Predefinito

    Scusa, non avevo letto ancora il tuo replay, pulito come sempre e molto preciso, ti ringrazio, ora mi informo un pò e ti faccio sapere! Grazie ancora per tutto!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •