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.
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:
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:
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:
Să afișăm acum înregistrările din baza de date și să vedem dacă modificarea a avut efect.
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.





