CodeÎnregistrare activă Igniter: Inserare, actualizare, ștergere interogare

⚡ Rezumat inteligent

CodeIgniter Active Record este un model de design care permite unui model să citească și să scrie în baza de date cu lanțuri de metode simple și sigure. Acesta acceptă inserarea, selectarea, actualizarea și ștergerea în diferite motoare de baze de date fără a rescrie codul și parametrizează intrarea pentru a preveni injecția SQL.

  • 🔗 Ideea de bază: Active Record încapsulează SQL în apeluri de metodă precum insert, get, update și delete.
  • 🛡️ Sigur: Valorile sunt transmise ca parametri, ceea ce protejează împotriva injecției SQL.
  • 🔄 Portabil: Același cod funcționează peste tot MySQL, SQL Server și altele prin drivere de baze de date.
  • ⚙️ Înființat: Configurați database.php și încărcați automat biblioteca bazei de date.
  • Introduce: `$this->db->insert('table', $data)` construiește și execută o comandă INSERT.
  • 🔍 Selectaţi: `$this->db->get('table')` returnează rândurile peste care se va parcurge bucla.
  • ✏️ Actualizare și ștergere: O clauză where plus o funcție de actualizare sau delete modifică sau elimină rânduri.

CodeÎnregistrare activă Igniter CRUD

Datele reprezintă linia de bază a majorității aplicațiilor. Acestea trebuie stocate pentru a putea fi analizate, pentru a oferi informații și a facilita deciziile de afaceri. Datele sunt de obicei stocate într-o bază de date. Printre principalele preocupări legate de interacțiunea cu baza de date se numără securitatea, ușurința accesului și implementările specifice furnizorului de baze de date ale limbajului de interogare structurat (SQL).

Active Record este un model de design care facilitează interacțiunea cu baza de date într-un mod sigur și elocvent. Active Record are următoarele avantaje:

  • Inserați, actualizați și ștergeți înregistrări cu lanțuri de metode simple.
  • Trimite datele introduse de utilizator în siguranță folosind parametri.
  • Vă permite să lucrați cu mai multe motoare de baze de date, cum ar fi MySQL și SQL Server fără a rescrie codul aplicației.
  • CodeIgniter folosește drivere specifice fiecărui motor de baze de date în fundal.

Cum se utilizează înregistrarea activă: exemplu

În acest tutorial, vom folosi o bază de date exemplu cu două tabele, unul cu comenzi și celălalt cu detalii. Acest tutorial presupune că aveți un MySQL baza de date instalată și rulând. Rulați următoarele scripturi pentru a crea baza de date pentru 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;

Codul de mai sus creează o bază de date numită ci_active_record și două tabele, orders și order_details. Relația dintre cele două tabele este definită de ID-ul coloanei din orders și order_id din order_details.

CodeConfigurarea bazei de date Igniter

Acum vom configura aplicația noastră pentru a comunica cu această bază de date. Deschideți fișierul de configurare a bazei de date situat în application/config/database.php și localizați următoarele linii:

'hostname' => 'localhost',
'username' => '',
'password' => '',
'database' => '',

Actualizați codul de mai sus la următorul text:

'hostname' => 'localhost',
'username' => 'root',
'password' => 'letmein',
'database' => 'ci_active_record',

Notă: va trebui să înlocuiți numele de utilizator și parola cu cele care corespund MySQL configurare.

Pe lângă detaliile de configurare a bazei de date, trebuie să spunem și CodeIgniter pentru a încărca biblioteca bazei de date atunci când aceasta se încarcă.

Pas 1) Deschideți următorul fișier: application/config/autoload.php.

Pas 2) Localizați bibliotecile de chei pentru array-ul $autoload și încărcați biblioteca bazei de date așa cum se arată mai jos:

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

Aici:

  • Codul de mai sus încarcă biblioteca bazei de date la pornirea aplicației.

CodeIntroducere înregistrare activă Igniter

În scopuri de testare, vom crea un controller și vom defini rute pentru a interacționa cu aplicația noastră prin Active Record. Creați un fișier nou application/controllers/ActiveRecordController.php și adăugați următorul cod:

<?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';
}
}

Aici:

  • $data = […] definește o variabilă de tip matrice de tip data care utilizează numele coloanelor tabelului bazei de date ca chei de tip matrice și le atribuie valori.
  • `$this->db->insert('orders', $data);` apelează metoda de inserare a bibliotecii bazei de date, transmițând numele tabelului `orders` și variabila `array` `$data`. Această linie generează instrucțiunea SQL INSERT folosind cheile array ca nume de câmpuri și valorile array ca valori care vor fi inserate.

Acum că am creat metoda controllerului, trebuie să creăm o rută pe care o vom apela pentru a o executa. Deschideți application/config/routes.php și adăugați următoarea linie:

$route['ar/insert'] = 'activerecordcontroller/store_order';

Aici:

  • Definim o rută ar/insert care apelează metoda store_order a ActiveRecordController.

Să pornim acum serverul web pentru a testa metoda noastră. Rulați următoarea comandă pentru a porni serverul PHP încorporat:

cd C:\Sites\ci-app
php -S localhost:3000

Aici:

  • Comanda de mai sus navighează la directorul proiectului și pornește serverul încorporat la portul 3000.

Încărcați următoarele URL în browserul dvs.: http://localhost:3000/ar/insert. Veți obține următorul rezultat:

order has successfully been created

Deschideți MySQL baza de date a tutorialului și verificați tabelul comenzilor. Veți vedea rândul nou creat, așa cum se arată în imaginea de mai jos:

Rând nou de comandă introdus prin înregistrarea activă

CodeSelectare înregistrare activă Igniter

În această secțiune, vom vedea cum se citesc înregistrările din baza de date și cum se afișează în browserul web ca o listă neordonată. Adăugați următoarea metodă la 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>";
}

Aici:

  • $query = $this->db->get('orders'); execută interogarea de selecție asupra tabelei orders, selectând toate câmpurile.
  • ecou „ Listarea comenzilor „; afișează un titlu HTML.
  • ecou „ „; afișează eticheta de deschidere pentru o listă HTML neordonată.
  • foreach ($query->result() as $row) {…} parcurge rezultatele returnate de baza de date și afișează echo „ $row->customer_name „; afișează numele_clientului.

Înainte de a încărca URL, puteți adăuga încă câteva înregistrări în baza de date. Să definim acum o rută pentru interogarea SELECT. Deschideți application/config/routes.php și adăugați următoarea rută:

$route['ar'] = 'activerecordcontroller';

Aici:

  • Ruta ar indică metoda index a clasei ActiveRecordController. Aceasta este valoarea implicită, motiv pentru care nu am specificat metoda index, așa cum am făcut pentru ruta care inserează înregistrări.

Presupunând că serverul web rulează deja, încărcați următoarele URL: http://localhost:3000/arAr trebui să vedeți rezultate similare cu următoarele în browserul web:

Lista de comenzi selectată prin Active Record

CodeActualizare înregistrare activă Igniter

În această secțiune, vom vorbi despre cum se utilizează Active Record pentru a actualiza baza de date. Să presupunem că dorim să actualizăm numele clientului Joe Thomas în Joe. Adăugați următoarea metodă la clasa 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';
}

Aici:

  • $data = […] definește câmpurile și valorile pe care dorim să le actualizăm în tabelul bazei de date.
  • $this->db->where('id', 1); setează clauza where a interogării de actualizare.
  • $this->db->update('comenzi', $date); generează interogarea de actualizare SQL și o execută în baza noastră de date.

Codul de mai sus produce următoarea instrucțiune SQL:

UPDATE orders SET customer_name = 'Joe' WHERE id = 1;

Să actualizăm acum fișierul application/config/routes.php și să adăugăm următoarea rută:

$route['ar/update'] = 'activerecordcontroller/update_order';

Salvați modificările și încărcați următoarele URL în browserul web:

Mesajul comenzii a fost actualizat cu succes

Să afișăm acum înregistrările din baza de date și să vedem dacă modificarea a avut efect.

Lista comenzilor care afișează numele actualizat

După cum puteți vedea din imaginea de mai sus, prima înregistrare a fost actualizată de la Joe Thomas la Joe.

CodeȘtergere înregistrare activă Igniter

Acum vom șterge o înregistrare din baza de date. Vom șterge înregistrarea cu ID-ul 3. Adăugați următoarea metodă la ActiveRecordController:

public function delete_order() {
$this->db->where('id', 3);
$this->db->delete('orders');

echo 'order has successfully been deleted';
}

Aici:

  • $this->db->where('id', 3); setează clauza where.
  • `$this->db->delete('orders');` șterge rândul din baza de date din tabela `orders` pe baza criteriilor stabilite folosind clauza `where`.

Pentru a executa codul de mai sus, încărcați următoarele URL în browserul tău web: http://localhost:3000/ar/delete.

Întrebări frecvente

Active Record leagă valorile ca parametri în loc să le concateneze în șirul SQL, astfel încât datele introduse de utilizator nu pot modifica structura interogării. Această comandă escaping se întâmplă automat pentru inserare, actualizare și unde.

Da. Active Record generează SQL prin intermediul unui driver pentru fiecare motor, deci trecerea de la MySQL Trecerea la SQL Server înseamnă de obicei modificarea configurației, nu a codului modelului, atâta timp cât evitați SQL-ul specific furnizorului.

Clauza where limitează rândurile afectate de instrucțiune. Fără aceasta, o actualizare sau o ștergere se execută pe fiecare rând din tabel, ceea ce este o greșeală frecventă și costisitoare.

Da. Inteligența artificială poate rescrie o comandă SELECT, INSERT, UPDATE sau DELETE ca echivalentul unei comenzi get, insert, update sau delete. Testați rezultatul, deoarece joncțiunile complexe pot necesita constructorul de interogări în loc de simpla înregistrare activă.

Încărcarea automată a bibliotecii bazei de date face ca $this->db să fie disponibilă în fiecare controler și model, fără a fi încărcată de fiecare dată. Este convenabilă atunci când cea mai mare parte a aplicației comunică cu baza de date.

Rezumați această postare cu: