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.

  • 🔗 Idea centrale: Active Record incapsula le query SQL in chiamate di metodo come insert, get, update e delete.
  • 🛡️ Sicuro: I valori vengono passati come parametri, il che protegge dalle iniezioni SQL.
  • 🔄 Portatile: Lo stesso codice funziona su MySQL, SQL Server e altri tramite driver di database.
  • ⚙️ Setup: Configura il file database.php e attiva il caricamento automatico della libreria del database.
  • Inserisci: $this->db->insert('table', $data) crea ed esegue un'operazione INSERT.
  • 🔍 Selezionare: $this->db->get('table') restituisce le righe su cui iterare.
  • Aggiorna ed elimina: Una clausola WHERE con UPDATE o DELETE modifica o rimuove le righe.

CodeIgniter Active Record CRUD

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:

Nuova riga d'ordine inserita tramite Active Record

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:

Elenco degli ordini selezionati tramite Active Record

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:

Ordine aggiornato con successo.

Visualizziamo ora i record del database e verifichiamo se la modifica è stata applicata.

Elenco degli ordini che mostra il nome aggiornato

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.

DOMANDE FREQUENTI

Active Record associa i valori come parametri invece di concatenarli nella stringa SQL, in modo che l'input dell'utente non possa alterare la struttura della query. Questa escaping avviene automaticamente per inserimento, aggiornamento e ubicazione.

Sì. Active Record genera SQL tramite un driver per ogni motore, quindi il passaggio da MySQL Modificare SQL Server di solito significa cambiare la configurazione, non il codice del modello, a patto di evitare SQL specifico del fornitore.

La clausola WHERE limita le righe su cui si applica l'istruzione. Senza di essa, un aggiornamento o una cancellazione vengono eseguiti su tutte le righe della tabella, il che è un errore comune e costoso.

Sì. L'IA può riscrivere un'istruzione SELECT, INSERT, UPDATE o DELETE come la corrispondente sequenza di operazioni GET, INSERT, UPDATE o DELETE. Verifica il risultato, poiché le join complesse potrebbero richiedere il query builder anziché un semplice Active Record.

Il caricamento automatico della libreria del database rende $this->db disponibile in ogni controller e modello senza doverlo caricare ogni volta. È comodo quando la maggior parte dell'applicazione interagisce con il database.

Riassumi questo post con: