Visualizzazione risultati 1 fino 7 di 7

Discussione: [MySqli] Una corretta connessione!

  1. #1
    Guest

    Question [MySqli] Una corretta connessione!

    Salve a tutti ragazzi, dopo aver spulciato un paio di guide per il web e naturalmente il manuale ufficiale, non sono riuscito a risolvere il mio dilemma!
    In pratica la mia intenzione è quella di estendere la classe mysql, come mi è stato suggerito proprio in questo forum, in questo modo avrei avuto tutti i metodi della classe velocemente.
    Sfortunatamente ancora non sono riuscito a capire la dinamica della cosa, in breve; ho realizzato questa classe:

    Codice PHP:
    // Classe Mysqli
    class Database extends mysqli {

    // Metodo per la connessione al database
    public function __construct($host, $user, $pass, $db) {
    // Richiamo il costruttore della classe mysqli
    parent::__construct($host, $user, $pass, $db);
    // Effettuo un controllo sulla connessione
    if (mysqli_connect_error()) {
    die(
    "Connessione Fallita: " . mysqli_connect_error());
    } else {
    echo
    "Connessione avvenuta con successo!";
    }
    }

    }
    Quando devo richiamarla:

    Codice PHP:
    $database = new Database("localhost", "ernestocampese", "pass", "my_bla bla");
    Il fatto sta che ogni volta devo avviare una connessione al database, devo riscrivere sempre il codice precedente, io invece vorrei evitare ciò, vorrei limitarmi a scrivere:

    Codice PHP:
    $database = new Database();
    Come dovrei fare? Aspetto con ansia le vostre risposte ragazzi!
    Ultima modifica di ernestocampese : 11-09-2013 alle ore 12.06.21 Motivo: Errori grammaticali.

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

    Predefinito

    Definisci delle costanti nella tua classe:
    Codice PHP:
    <?php
    class Database extends mysqli {
    const
    HOST = "localhost",
    USER = "username",
    PASS = "password",
    DB = "my_database";

    // Metodo per la connessione al database
    public function __construct() {
    // Richiamo il costruttore della classe mysqli
    $mysqli = parent::__construct(self::HOST, self::USER, self::PASS, self::DB);
    // Effettuo un controllo sulla connessione
    if ($mysqli->connect_errno) {
    die(
    "Connessione Fallita: " . $mysqli->connect_error);
    } else {
    echo
    "Connessione avvenuta con successo!";
    }

    return
    $mysqli;
    }
    }

    $db = new Database;

    ?>
    Come vedi ho apportato alcune modifiche al codice.
    Non devi solo fare la connessione al database ma restituire l'oggetto generato dalla connessione (quindi salvare ciò che restituisce parent::__construct e restituirlo).
    Ultima modifica di javascripter : 11-09-2013 alle ore 14.34.44

  3. #3
    Guest

    Predefinito

    Grazie mille, sei stato chiarissimo.
    Mi permetto di chiederti se per te questa classe è strutturata bene, oppure se magari conosci altre strutture piu semplici e magari più ottimali per connettersi a mysqli.

  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
    Grazie mille, sei stato chiarissimo.
    Mi permetto di chiederti se per te questa classe è strutturata bene, oppure se magari conosci altre strutture piu semplici e magari più ottimali per connettersi a mysqli.
    La classe in sè, non ha nulla di complesso.
    È una semplificazione (dal punto di vista del programmatore) del normale metodo di connessione.

    Certo se tu la usassi solo per questo obiettivo sarebbe un po' sprecato e forse faresti meglio a creare una semplice funzione.
    Sarebbe opportuno, invece, creare altri metodi personalizzati per estrarre i dati e svolgere operazioni relative al database.

    Per esempio, supponendo che tu abbia una tabella che contenga gli utenti, creassi metodi del tipo:
    Codice PHP:
    $user = $db->getUserById(123);
    $user2 = $db->getUserById(1);

    echo
    "Benvenuto ", $user->nickname, "!";
    echo
    "Il tuo ultimo accesso risalte a: ", $user->last_login, ".";



    if(
    $user->isAdministrator) {
    echo
    "Pannello amministratore";
    }

    $messages = $db->getPrivateMessagges($user->id, $user2->id);

    foreach(
    $message in $messages) {
    echo
    $message->author, " ", $message->text;
    }

    if(
    $db->deleteUsersById($user->id, $user2->id))
    echo
    "Utenti cancellati con successo";
    Questo giusto per farti un esempio

  5. #5
    Guest

    Predefinito

    Grazie mille
    Ora sto provando a fare un metodo per l'inserimento dei dati nel database, avevo pensato ad una chiamata tipo:

    Codice PHP:
    $db->db_insert("users", array("name","surname","age"), array("Pippo","De Pippo", "10"));
    e il metodo dovrebbe essere qualcosa tipo:

    Codice PHP:
    public function db_insert($t,$r,$v) {

    $query = "INSERT INTO " . $t . " (";

    foreach(
    $r as $row){
    $query.= "'" . $row . "'";
    }

    $query.= ") VALUES (";
    foreach(
    $v as $val){
    $query.= "'" . $val . "',";
    }

    $query.= ")";
    Ma si sta rilevando un allungamento dei tempi invece che un ottimizzazione...
    Conosci qualche altro sistema per velocizzare l'inserimento dei dati?

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

    Predefinito

    Ma per velocizzare intendi diminuire il tempo di esecuzione o scrivere codice più velocemente/meno codice?
    Ad ogni modo, in questo caso io avrei usato un array associativo:
    Codice PHP:
    $db->insert("users", array(
    "campo1" => "valore1",
    "campo2" => "valore2",
    // ..
    ));
    Codice PHP:
    public function db_insert($table, $data) {
    $fields = join("`,`", array_keys($data));
    $values = join("','", array_map( array(self, "real_escape_string"), array_values($data) )); // real_escape dei valori

    $query = "INSERT INTO `$table` (`$fields`) VALUES ('$values')";
    // la query deve essere eseguita...
    }
    p.s. un'altra soluzione 'elegante' sarebbe usare la classe mysqli_stmt.
    I metodi prepare, bind_param e bind_result permettono di eseguire le query diversamente.

    La query va preparata:
    Codice PHP:
    $db = new mysqli(...);
    $query = $db->prepare("INSERT INTO ? (?, ?) VALUES (?, ?)");
    $query->bind_param("ssssi", "users", "name", "age", "Pippo", 20);

    // la query è ora: INSERT INTO users (name, age) VALUES ('Pippo', 20)


    $query->execute();
    Ovviamente se ti interessa, puoi approfondire sul sito di php ;)
    Ultima modifica di javascripter : 11-09-2013 alle ore 21.01.30

  7. #7
    Guest

    Predefinito

    La seconda mi sembra abbastanza elegante,ma sopratutto veloce! Grazie mille!

Regole di scrittura

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