Codeigniter: Interazione con i database

15 Oct 2019 | M.A.D.R.

Continuiamo questa piccola avventura: CodeIgniter può interagire con i database attraverso un model (ma non è obbligatorio) o attraverso un controller (altamente sconsigliato).

Cosa significa interagire con un database?

Possiamo recuperare informazioni in memoria persistente per visualizzarli a schermo in base alle richieste.

Per prima cosa bisogna configurare CodeIgniter per utilizzare il database, quindi la prima operazione sarà quella di andare a settare la libreria database in config/autoload.php e successivamente andranno settati tutti i parametri corretti in application/config/database.php

Autoload.php

$autoload['libraries'] = array('database');

Database.php

$db['default'] = array(
   'dsn'  => '',
   'hostname' => 'localhost',
   'username' => '',
   'password' => '',
   'database' => '',
   'dbdriver' => 'mysqli',
   'dbprefix' => '',
   'pconnect' => FALSE,
   'db_debug' => (ENVIRONMENT !== 'production'),
   'cache_on' => FALSE,
   'cachedir' => '',
   'char_set' => 'utf8',
   'dbcollat' => 'utf8_general_ci',
   'swap_pre' => '',
   'encrypt' => FALSE,
   'compress' => FALSE,
   'stricton' => FALSE,
   'failover' => array(),
   'save_queries' => TRUE
);

Per avviare l'applicazione in modo facile e veloce bisognerà solo settare

  • hostname
  • username
  • password
  • database

Solitamente i programmatori sono abituati a scrivere query complesse senza ricordarsi e verificare che molte di queste diventano SlowQuery, ossia query che non sono adatte all'esecuzione continua

Le SlowQuery provocano spesso rallentamenti della nostra applicazione.

Codeigniter oltre a far utilizzare classiche query, mette a disposizione una modalità di interazione con i database chiamata Active Record e basata su funzioni immediate e facili da ricordare.

Cosa significa questo?

Il programmatore non dovrà più scrivere query complesse di proprio pugno ma basterà utilizzare questa funzionalità per rendere il codice più facile ed immediato alla lettura.

Questa è la parte principale che permetta alla libreria di connettersi con il nostro database.

Alcuni esempi mettono in evidenza la differenza tra i due approcci:

//Stile Classico
$result=$this->db->query('SELECT * FROM utenti');
//Stile Active Record
$result=$this->db->get('utenti);

Come possiamo notare non abbiamo più aggiunto la sintassi SQL, ma semplicemente abbiamo invocato un wrapper che avrà il compito di "compilare" la query per noi.

Il vantaggio è ovvio, il codice è molto più pulito e soprattutto i nostri file saranno sicuramente più gestibili.

Esempio pratico di applicazione reale: ipotizziamo di voler effettuare una query per recuperare tutti gli utenti che abbiano 20 anni e abitino a Roma.

//Stile classico
$query='SELECT * FROM utenti WHERE user_eta = 20 AND residenza="Roma"';
$result=$this->db->query($query);
//Stile Active Record
$result=$this->db->where('user_eta',20)->where('residenza','Roma')->get('utenti);
//Active record con paramentri
$where=['user_eta'=>20,'residenza'=>'Roma'];
foreach($where as $chiave=>$valore){
    $this->db->where($chiave,$valore);
}
$this->db->get('utenti');

Come si può notare sin da subito, diventerà più semplice l'utilizzo di parametri nei modelli dati.

Questa condizione permette un'incremento di velocità d'esecuzione del codice (in quanto meno righe ha il codice, più è performante il nostro script) e un solo punto d'accesso ai dati utili.

Stessa cosa vale per l'insert, update e delete, vediamo in breve una sintassi avanzata per sfruttare al massimo questo approccio

//inserimento classico
INSERT INTO utenti (name,surname,eta,residenza) VALUES(..........)
//qui i primi problemi con i caratteri accentati, escape, cluster etc....
//Inserimento da array associativo
$utente=['name'=>'Utente','surname'=>'CUtente','eta'=>20,'residenza'=>'Roma'];
$this->db->insert('utenti',$utente);
//Chiaro pulito facile e veloce

Quindi se il nostro approccio sarà di tipo ActiveRecord (NO ORM) avremo sicuramente maggiori probabilità di NON commettere errori.

Codeigniter VS Laravel: chi vince la sfida?

15 Oct 2019 | M.A.D.R.

Oggi l'evoluzione dei linguaggi sono sempre più orientate verso la semplificazione del codice, l’ottimizzazione delle funzionalità e la velocità di esecuzione. Codeigniter il nonno di tutti i framework, riesce ancora a tener testa al gio...

Codeigniter Migration: Versioning Database

15 Oct 2019 | M.A.D.R.

Per “migration” s'intende le gestione delle varie versioni di un database. Grazie al concetto di migration possiamo effettuare tutte le operazioni sul database che abitualmente effetuiamo con strumenti come phpMyAdmin, Toad, MySQL...

Codeigniter CLI: Eseguiamo lavori da linea di comando.

15 Oct 2019 | M.A.D.R.

Come tutti sapranno un framework che si rispetti mette a disposizione la CLI (command line interface), la quale permette di richiamare comandi più o meno complessi. A cosa servono? Per semplicità soffermiamoci solo ad alcuni principali utili...

Codeigniter: Estendiamo il framework con gli HOOKS

15 Oct 2019 | M.A.D.R.

Spesso i dev hanno necessità di modificare il comportamento ed il flusso dell'applicazione, codeigniter mette a disposizione gli HOOKS. Lavorare con un framework, anche se molto semplice, spesso induce ad errori comuni e poco sicuri, basti pensa...

Codeigniter: Profilazione dell'applicazione

15 Oct 2019 | M.A.D.R.

Seguendo l'articolo del Banchmark, per completare le operazioni di performance del nostro codice, Codeigniter permette la creazione di una profilazione dettagliata dell'esecuzione del nostro codice. La classe Profiler visualizzerà i risultati de...

CodeIgniter: Analizziamo le performance del nostro codice

15 Oct 2019 | M.A.D.R.

Ogni programmatore ad un certo punto dello sviluppo del codice, ha necessità di analizzare le performance della propria applicazione/funzione/metodo, infatti CodeIgniter ha una classe di gestione Benchmark sempre attiva, che consente di calcolare ...

Codeigniter: Template Engine o Template Parser

15 Oct 2019 | M.A.D.R.

Salve a tutti, dopo aver commentato la funzione dei controller e dei model non resta che parlare delle view, o come meglio definiti Template Engine o Template Parser. Codeigniter non ha un vero e proprio Template Engine, ma sfrutta una classe nat...

Codeigniter: Interazione con i database

15 Oct 2019 | M.A.D.R.

Continuiamo questa piccola avventura: CodeIgniter può interagire con i database attraverso un model (ma non è obbligatorio) o attraverso un controller (altamente sconsigliato). Cosa significa interagire con un database? Possiamo recuperare ...

CodeIgniter: Flussi di funzionamento "Router"

15 Oct 2019 | M.A.D.R.

Quello che uno sviluppatore, abituato a interagire con i files php, deve capire la centralità del file index.php, ossia il cuore di un progetto Framework, ed in questo caso Codeigniter router. Non esistono altre pagine all’infuori di index.ph...

Installazione CodeIgniter: prime impressioni

15 Oct 2019 | M.A.D.R.

Abbiamo già citato nell'articolo precedente alcune caratteristiche di questo Framework CodeIgniter. Piccola premessa obbligata... Oggi passeremo al setaccio la procedura d'installazione dello stesso e cercheremo di orientarci nella struttura ...

CodeIgniter - Un framework di tutto rispetto

15 Oct 2019 | M.A.D.R.

Arriva un momento, nel percorso lavorativo di un programmatore Php, nel quale si avverte la mancanza di un framework che possa semplificare la gestione di flussi più o meno complessi. I così detti framework contengono metodi e funzioni in rispo...

Soluzioni complete per ogni esigenza