Login
Libri
Home

Eseguire Queries

Share

Queries

$this->db->query();

Per eseguire una query si utilizza la sueguente funzione:


$this->db->query('YOUR QUERY HERE');

La funzione query() restituisce un oggetto, quando la query che si è eseguita è di "lettura" (ndr. Select... ), che può poi essere usato per mostrare i risultati ottenuti. Quando si utilizzano invece queries di scrittura (ndr. Update, Insert, Delete....), queste restituiscono TRUE o FALSE, secondo il loro esito. Quando si recuperano i dati, tipicamente si assegnerà il risultato della query ad una propria variabile, come nell'esempio seguente:


$query = $this->db->query('YOUR QUERY HERE');

$this->db->simple_query();

Questa è una versione semplificata della funzione $this->db->query(). Restituisce SOLAMENTE TRUE/FALSE a seguito del successo o meno della query. Non restituisce nessun risultato dal database, non imposta timer di query, o associa dati, né tantomeno salva la propria query per il debugging. Permette semplicemente di eseguire una query. Molti utenti useranno raramente questa funzione.

Aggiungere il prefisso al Database manualmente

Se si è configurato un prefisso per il database che si sta utilizzando e lo si vuole aggiungere manualmente, è possibile farlo come mostrato di seguito.


$this->db->dbprefix('tablename');
// outputs prefix_tablename

 

Protecting identifiers

In molti database è consigliabile proteggere i nomi delle tabelle e dei campi - per esempio con i backticks in MySQL. Le queries Active Record sono protette automaticamente, comunque nel caso si abbia bisogno di proggere un identificativo, è possibile utilizzare:


$this->db->protect_identifiers('table_name');

Questa funzione aggiugerò anche un prefisso alla tabella, assumendo che si abbia un prefisso specificato nel file di configurazione del database. Per abilitare il prefisso è necessario impostare TRUE (booleano) come secondo parametro:


$this->db->protect_identifiers('table_name', TRUE);

Escaping Queries

E' buona pratica effettuare la procedura di escape prima di inserire i dati nel proprio database. CodeIgniter ha tre strumenti per aiutarti in questa attività:

  1. $this->db->escape() Questa funzione determina il data type che per fare l'escape sulle stringhe. Inoltre aggiunge in atomatico le vigolette sinogle attorno ai dati:
    
    $sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
    
    
  2. $this->db->escape_str() Questa funzione fa l'escape dei dati che gli vengono passati, senza riguardo al tipo. Utilizza la funzione così:
    
    $sql = "INSERT INTO table (title) VALUES('".$this->db->escape_str($title)."')";
    
    
  3. $this->db->escape_like_str() Questo metodo dovrà essere utilizzato quando la stringa che viene passata deve essere utilizzata in condizioni di LIKE, così che i caratteri speciali ('%', '_'), nella stringa, vengano correttamente saltati.
    
     $search = '20% raise';
     $sql = "SELECT id FROM table WHERE column LIKE '%".$this->db->escape_like_str($search)."%'";
    
    

Il Bindings di Query

Il Bindings permette di semplificare la sintassi della query unendo più query insieme. Considera l'esempio seguente:


$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";

$this->db->query($sql, array(3, 'live', 'Rick')); 

I punti interrogativi nella query vengono sostituiti automaticamente con i valori passati dall'array, come secondo parametro della funzione.

Il secondo vantaggio è che i valori sono automaticamente soggetti ad escape, producendo così query sicure. Non è necessario ricordarsi di fare l'escape manuale dei dati; CodeIgniter lo farà per te.

Ultimo aggiornamento ( Venerdì 18 Marzo 2011 17:43 )

Libri