2015-12-01 36 views
5

Sto cercando di accorciare il mio codice non solo per la leggibilità ma anche per la personalizzazione del progetto su cui sto lavorando.Creazione di una tabella DataBase all'interno di una classe come funzione

Ho creato una classe che si collega al DataBase ma sto lottando con una funzione da usare che creerà una tabella con colonne.

La classe assomiglia a questo finora:

class DataBase { 

    private $link; 
    private $host, $username, $password, $database; 

    public function __construct($host, $username, $password, $database){ 
     $this->host  = $host; 
     $this->username = $username; 
     $this->password = $password; 
     $this->database = $database; 

     $this->link = mysql_connect($this->host, $this->username, $this->password) 
      OR die("There was a problem connecting to the database."); 

     mysql_select_db($this->database, $this->link) 
      OR die("There was a problem selecting the database."); 

     return true; 
    } 

    public function query($query) { 
     $result = mysql_query($query); 
     if (!$result) die('Invalid query: ' . mysql_error()); 
     return $result; 
    } 

    public function __destruct() { 
     mysql_close($this->link) 
      OR die("There was a problem disconnecting from the database."); 
    } 
} 

Come si può vedere è già stato aggiunto il metodo di query. Un esempio di come la sua corsa è:

$db = new DataBase('localhost',$user,$pass,$name); 
$db->query('SELECT * FROM table WHERE id="0"'); 

Qualcuno potrebbe possibile mi ha mandato un po 'di codice per aggiungere la funzione per aggiungere la tabella Inserimento? Ho provato questo:

public function create_table($t_data) { 
    $result = $t_data; 
    if (!$result) die('Invalid query: ' . mysql_error()); 
    return $result; 
} 

Usage:

$t_data = 'CREATE TABLE log_users(
    uid VARCHAR(1024) NOT NULL, 
    username VARCHAR(33) NOT NULL, 
    password VARCHAR(18) NOT NULL, 
    admin VARCHAR(1) DEFAULT 0, 
    key VARCHAR(18) NOT NULL, 
    constant VARCHAR(1) DEFAULT 0)'; 

$db->create_table($t_data); 
+0

Ehi, la tua funzione 'query' corrente è estremamente suscettibile a un attacco di SQL Injection, non si disinfetta o si prepara la query in modo che un utente malintenzionato possa facilmente distruggere o compromettere il database. Stai anche usando la libreria 'mysql' che è stata deprecata per anni, dovresti almeno usare' mysqli' o meglio ancora 'PDO'. PDO ti farà risparmiare un sacco di grattacapi e ho scritto qui un framework di base per una classe DB che gestisce gli attacchi SQL injection https://github.com/alexmk92/ASFramework/blob/master/app/core/models/Database.php – Alex

+0

@Alex Grazie mille! Questo è in realtà ciò di cui avevo bisogno! Terrò un link nel codice sorgente per questo! –

+0

Domanda, come utilizzerei questo? Non sono abituato a SQLi. Sarebbe: $ db = nuovo Database(); $ db-> fetch ('SELECT FROM * table'); e come creerei un tavolo con questi? Inoltre, grazie! @alex –

risposta

1

Suggerirei guardando MySQLi o PDO dal momento che si sta utilizzando la funzione deprecato mysql che è vulnerabile così com'è adesso. Ho aggiornato la tua lezione (non testata) per iniziare. Questo risolve anche il tuo problema originale di non essere in grado di creare un tavolo.