CodeIgniter Active Record: query di inserimento, aggiornamento ed eliminazione
⚡ Riepilogo intelligente
CodeIgniter Active Record è un modello di progettazione che consente a un modello di leggere e scrivere nel database tramite catene di metodi semplici e sicure. Supporta operazioni di inserimento, selezione, aggiornamento ed eliminazione su diversi motori di database senza la necessità di riscrivere il codice e parametrizza l'input per prevenire attacchi di SQL injection.

I dati sono la linfa vitale della maggior parte delle applicazioni. Devono essere archiviati per poter essere analizzati, fornire informazioni utili e facilitare le decisioni aziendali. I dati vengono solitamente memorizzati in un database. Tra le principali problematiche da considerare quando si interagisce con un database vi sono la sicurezza, la facilità di accesso e le implementazioni specifiche del linguaggio SQL (Structured Query Language) da parte del fornitore del database.
Active Record è un modello di progettazione che semplifica l'interazione con il database in modo sicuro ed efficace. Active Record offre i seguenti vantaggi:
- Inserisci, aggiorna ed elimina record con semplici catene di metodi.
- Consente di inviare input dall'utente in modo sicuro tramite parametri.
- Ti consente di lavorare con più motori di database come MySQL e SQL Server senza riscrivere il codice dell'applicazione.
- CodeIgniter utilizza in background driver specifici per ciascun motore di database.
Come utilizzare Active Record: esempio
In questo tutorial, useremo un database di esempio con due tabelle, una con gli ordini e l'altra con i dettagli. Questo tutorial presuppone che tu abbia un MySQL Il database è installato ed è in esecuzione. Eseguire i seguenti script per creare il database del tutorial:
CREATE SCHEMA ci_active_record; USE ci_active_record; CREATE TABLE `order_details` ( `id` int(11) NOT NULL AUTO_INCREMENT, `order_id` int(11) DEFAULT NULL, `item` varchar(245) DEFAULT NULL, `quantity` int(11) DEFAULT '0', `price` decimal(10,2) DEFAULT '0.00', `sub_total` decimal(10,2) DEFAULT '0.00', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT = 1; CREATE TABLE `orders` ( `id` int(11) NOT NULL AUTO_INCREMENT, `date` timestamp NULL DEFAULT NULL, `customer_name` varchar(245) DEFAULT NULL, `customer_address` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT = 1;
Il codice sopra riportato crea un database denominato ci_active_record e due tabelle, orders e order_details. La relazione tra le due tabelle è definita dalla colonna id nella tabella orders e dalla colonna order_id nella tabella order_details.
CodeConfigurazione del database di Igniter
Ora configureremo la nostra applicazione per comunicare con questo database. Apri il file di configurazione del database che si trova in application/config/database.php e individua le seguenti righe:
'hostname' => 'localhost', 'username' => '', 'password' => '', 'database' => '',
Aggiorna il codice sopra come segue:
'hostname' => 'localhost', 'username' => 'root', 'password' => 'letmein', 'database' => 'ci_active_record',
Nota: dovrai sostituire il nome utente e la password con quelli che corrispondono al tuo MySQL configurazione.
Oltre ai dettagli di configurazione del database, dobbiamo anche comunicare CodeIgniter si occuperà di caricare la libreria del database al momento del suo avvio.
Passo 1) Apri il seguente file: application/config/autoload.php.
Passo 2) Individua le librerie della chiave dell'array $autoload e carica la libreria del database come mostrato di seguito:
$autoload['libraries'] = array('database');
Qui:
- Il codice sopra riportato carica la libreria del database all'avvio dell'applicazione.
CodeInserimento accenditore Record attivo
A scopo di test, creeremo un controller e definiremo i percorsi per interagire con la nostra applicazione tramite Active Record. Crea un nuovo file application/controllers/ActiveRecordController.php e aggiungi il seguente codice:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class ActiveRecordController extends CI_Controller { public function store_order(){ $data = [ 'date' => '2018-12-19', 'customer_name' => 'Joe Thomas', 'customer_address' => 'US' ]; $this->db->insert('orders', $data); echo 'order has successfully been created'; } }
Qui:
- $data = […] definisce una variabile array data che utilizza i nomi delle colonne della tabella del database come chiavi dell'array e assegna loro dei valori.
- La riga `$this->db->insert('orders', $data);` richiama il metodo `insert` della libreria del database, passando come parametri il nome della tabella `orders` e la variabile array `$data`. Questa riga genera l'istruzione SQL `INSERT` utilizzando le chiavi dell'array come nomi dei campi e i valori dell'array come valori da inserire.
Ora che abbiamo creato il metodo del controller, dobbiamo creare una route che richiameremo per eseguirlo. Apri application/config/routes.php e aggiungi la seguente riga:
$route['ar/insert'] = 'activerecordcontroller/store_order';
Qui:
- Definiamo un percorso ar/insert che richiama il metodo store_order dell'ActiveRecordController.
Avviamo ora il server web per testare il nostro metodo. Esegui il seguente comando per avviare il server PHP integrato:
cd C:\Sites\ci-app php -S localhost:3000
Qui:
- Il comando sopra indicato accede alla directory del progetto e avvia il server integrato sulla porta 3000.
Caricare quanto segue URL nel tuo browser: http://localhost:3000/ar/insertOtterrai il seguente risultato:
order has successfully been created
Aprire il MySQL tutorial database e controlla la tabella degli ordini. Vedrai la riga appena creata, come mostrato nell'immagine qui sotto:
CodeIgniter Seleziona record attivo
In questa sezione vedremo come leggere i record dal database e visualizzarli nel browser web come un elenco non ordinato. Aggiungi il seguente metodo all'ActiveRecordController:
public function index() { $query = $this->db->get('orders'); echo "<h3>Orders Listing</h3>"; echo "<ul>"; foreach ($query->result() as $row) { echo "<li>$row->customer_name</li>"; } echo "</ul>"; }
Qui:
- $query = $this->db->get('orders'); esegue la query di selezione sulla tabella orders, selezionando tutti i campi.
- eco “ Elenco degli ordini ”; visualizza un'intestazione HTML.
- eco “ ”; stampa il tag di apertura per un elenco HTML non ordinato.
- foreach ($query->result() as $row) {…} scorre i risultati restituiti dal database ed echo “ $row->customer_name "; stampa il nome del cliente.
Prima di caricare il URLÈ possibile aggiungere un paio di record al database. Definiamo ora un percorso per la query SELECT. Apri il file application/config/routes.php e aggiungi il seguente percorso:
$route['ar'] = 'activerecordcontroller';
Qui:
- Il percorso `ar` punta al metodo `index` della classe `ActiveRecordController`. Questo è il comportamento predefinito, motivo per cui non abbiamo specificato il metodo `index`, come invece abbiamo fatto per il percorso che inserisce i record.
Supponendo che il server web sia già in esecuzione, caricare quanto segue URL: http://localhost:3000/arNel tuo browser web dovresti visualizzare risultati simili ai seguenti:
CodeAggiornamento di Igniter Active Record
In questa sezione, parleremo di come utilizzare Active Record per aggiornare il database. Supponiamo di voler aggiornare il nome del cliente Joe Thomas in Joe. Aggiungiamo il seguente metodo alla classe ActiveRecordController:
public function update_order() { $data = [ 'customer_name' => 'Joe', ]; $this->db->where('id', 1); $this->db->update('orders', $data); echo 'order has successfully been updated'; }
Qui:
- $data = […] definisce i campi e i valori che desideriamo aggiornare nella tabella del database.
- $this->db->where('id', 1); imposta la clausola where della query di aggiornamento.
- $this->db->update('ordini', $dati); genera la query di aggiornamento SQL e la esegue sul nostro database.
Il codice sopra riportato produce la seguente istruzione SQL:
UPDATE orders SET customer_name = 'Joe' WHERE id = 1;
Aggiorniamo ora il file application/config/routes.php e aggiungiamo la seguente rotta:
$route['ar/update'] = 'activerecordcontroller/update_order';
Salva le modifiche e carica quanto segue URL nel browser web:
Visualizziamo ora i record del database e verifichiamo se la modifica è stata applicata.
Come potete vedere dall'immagine qui sopra, il primo record è stato aggiornato da Joe Thomas a Joe.
CodeIgniter Elimina record attivo
Ora elimineremo un record dal database. Elimineremo il record con ID 3. Aggiungi il seguente metodo all'ActiveRecordController:
public function delete_order() { $this->db->where('id', 3); $this->db->delete('orders'); echo 'order has successfully been deleted'; }
Qui:
- $this->db->where('id', 3); imposta la clausola where.
- $this->db->delete('orders'); elimina la riga del database nella tabella orders in base ai criteri impostati utilizzando la clausola where.
Per eseguire il codice sopra, caricare quanto segue URL nel tuo browser web: http://localhost:3000/ar/delete.




