CodeSüütaja aktiivse kirje sisestamine, värskendamine, kustutamine päring

⚡ Nutikas kokkuvõte

CodeIgniter Active Record on disainimuster, mis võimaldab mudelil andmebaasi lugeda ja kirjutada lihtsate ja turvaliste meetodikettide abil. See toetab sisestamist, valimist, värskendamist ja kustutamist erinevates andmebaasimootorites ilma koodi ümber kirjutamata ning see parameetriseerib sisendi SQL-süstimise vältimiseks.

  • 🔗 Põhiidee: Active Record mähib SQL-i meetodikõnedesse nagu insert, get, update ja delete.
  • 🛡️ Secure: Väärtused edastatakse parameetritena, mis kaitseb SQL-süstimise eest.
  • 🔄 Kaasaskantav: Sama kood töötab kõikjal MySQL, SQL Server ja teised andmebaasidraiverite kaudu.
  • ⚙️ Setup: Konfigureeri database.php ja laadi andmebaasi teek automaatselt.
  • Lisa: $this->db->insert('table', $data) loob ja käivitab INSERTi.
  • 🔍 Vali: $this->db->get('table') tagastab read, mida tsükkel läbib.
  • ✏️ Värskenda ja kustuta: WHERE-klausel koos käsuga update või delete muudab või eemaldab ridu.

CodeSüütaja aktiivse kirje CRUD

Andmed on enamiku rakenduste alustala. Neid tuleb salvestada, et neid saaks analüüsida, et saada teadmisi ja hõlbustada äriotsuseid. Andmeid salvestatakse tavaliselt andmebaasi. Andmebaasiga suhtlemisel on peamisteks murekohtadeks turvalisus, juurdepääsu lihtsus ja andmebaasi müüjapõhised struktureeritud päringukeele (SQL) implementatsioonid.

Active Record on disainimuster, mis muudab andmebaasiga suhtlemise turvaliseks ja loogiliseks. Active Recordil on järgmised eelised:

  • Lisa, uuenda ja kustuta kirjeid lihtsate meetodikettide abil.
  • Esitab kasutaja sisendi turvaliselt parameetrite abil.
  • Võimaldab töötada mitme andmebaasimootoriga, näiteks MySQL ja SQL Server ilma rakenduskoodi ümber kirjutamata.
  • CodeIgniter kasutab taustal iga andmebaasimootori jaoks spetsiifilisi draivereid.

Kuidas kasutada aktiivset kirjet: näide

Selles õpetuses kasutame näidisandmebaasi kahe tabeliga, millest üks sisaldab tellimusi ja teine ​​üksikasju. See õpetus eeldab, et teil on MySQL andmebaas on installitud ja töötab. Õpetusandmebaasi loomiseks käivitage järgmised skriptid:

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;

Ülaltoodud kood loob andmebaasi nimega ci_active_record ja kaks tabelit, orders ja order_details. Kahe tabeli vaheline seos määratakse kindlaks veeru ID-ga orders tabelis ja order_id-ga order_details tabelis.

CodeSüütaja andmebaasi konfiguratsioon

Nüüd konfigureerime oma rakenduse selle andmebaasiga suhtlema. Avage andmebaasi konfiguratsioonifail, mis asub failis application/config/database.php, ja leidke sealt järgmised read:

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

Uuenda ülaltoodud koodi järgmiselt:

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

Märge: peate kasutajanime ja parooli asendama omadega, mis vastavad teie omale. MySQL konfiguratsioon.

Lisaks andmebaasi konfiguratsiooni üksikasjadele peame ütlema ka CodeSüütaja andmebaasi teegi laadimiseks laadimisel.

Step 1) Ava järgmine fail: application/config/autoload.php.

Step 2) Leidke $autoload massiivi võtmeteegid ja laadige andmebaasiteek allpool näidatud viisil:

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

siin:

  • Ülaltoodud kood laadib andmebaasi teeki rakenduse käivitamisel.

CodeSüütaja Sisesta aktiivne kirje

Testimise eesmärgil loome kontrolleri ja määratleme marsruudid, et suhelda meie rakendusega Active Recordi kaudu. Looge uus fail application/controllers/ActiveRecordController.php ja lisage järgmine kood:

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

siin:

  • $data = […] defineerib massiivimuutuja data, mis kasutab andmebaasi tabeli veerunimesid massiivivõtmetena ja määrab neile väärtused.
  • $this->db->insert('orders', $data); kutsub välja andmebaasiteegi sisestusmeetodi, edastades tabeli nime orders ja massiivimuutuja $data. See rida genereerib SQL INSERT-lause, kasutades massiivivõtmeid väljanimedena ja massiivi väärtusi lisatavate väärtustena.

Nüüd, kui oleme kontrolleri meetodi loonud, peame looma marsruudi, mida me selle käivitamiseks kutsume. Avage application/config/routes.php ja lisage järgmine rida:

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

siin:

  • Me defineerime marsruudi ar/insert, mis kutsub esile ActiveRecordControlleri store_order meetodi.

Käivitame nüüd veebiserveri oma meetodi testimiseks. Sisseehitatud PHP-serveri käivitamiseks käivitage järgmine käsk:

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

siin:

  • Ülaltoodud käsk sirvib projektikataloogi ja käivitab sisseehitatud serveri pordil 3000.

Laadige järgmine URL oma brauserisse: http://localhost:3000/ar/insertSaate järgmise tulemuse:

order has successfully been created

avage MySQL õpetuse andmebaasi ja kontrollige tellimuste tabelit. Näete äsja loodud rida, nagu on näidatud alloleval pildil:

Uus tellimuse rida lisati aktiivse kirje kaudu

CodeSüütaja Valige aktiivne kirje

Selles jaotises näeme, kuidas andmebaasi kirjeid lugeda ja neid veebibrauseris järjestamata loendina kuvada. Lisage ActiveRecordControllerile järgmine meetod:

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>";
}

siin:

  • $query = $this->db->get('orders'); käivitab valikupäringu tellimuste tabeli suhtes, valides kõik väljad.
  • kaja “ Tellimuste loetelu ”; kuvab HTML-päise.
  • kaja “ ”; prindib järjestamata HTML-loendi avasildi.
  • foreach ($query->result() as $row) {…} tsüklib läbi andmebaasist tagastatud tulemused ja echo „ $row->kliendi_nimi ”; prindib kliendi_nime.

Enne laadimist URL, saate andmebaasi lisada veel paar kirjet. Määratleme nüüd SELECT-päringu jaoks marsruudi. Avage application/config/routes.php ja lisage järgmine marsruut:

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

siin:

  • Marsruut ar viitab ActiveRecordController klassi index-meetodile. See on vaikeväärtus, mistõttu me ei määranud index-meetodit, nagu me tegime kirjeid lisava marsruudi puhul.

Eeldades, et veebiserver juba töötab, laadige järgmine URL: http://localhost:3000/ar. Veebibrauseris peaksite nägema sarnaseid tulemusi:

Tellimuste loend valitud aktiivse kirje kaudu

CodeSüütaja värskenduse aktiivne kirje

Selles jaotises räägime sellest, kuidas kasutada Active Recordi andmebaasi värskendamiseks. Oletame, et tahame kliendi nime Joe Thomas värskendada Joeks. Lisage ActiveRecordController klassi järgmine meetod:

public function update_order() {
$data = [
'customer_name' => 'Joe',
];
$this->db->where('id', 1);
$this->db->update('orders', $data);
echo 'order has successfully been updated';
}

siin:

  • $data = […] määratleb andmebaasi tabelis uuendatavad väljad ja väärtused.
  • $this->db->where('id', 1); määrab uuendamispäringu where-klausli.
  • $this->db->update('tellimused', $andmed); genereerib SQL-i värskenduspäringu ja käivitab selle meie andmebaasis.

Ülaltoodud kood loob järgmise SQL-lause:

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

Uuendame nüüd application/config/routes.php ja lisame järgmise marsruudi:

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

Salvesta muudatused ja laadi järgmine URL veebibrauseris:

Tellimuse edukalt uuendamise teade

Kuvame nüüd andmebaasi kirjed ja vaatame, kas muudatus on jõustunud.

Tellimuste loend, mis kuvab uuendatud nime

Nagu ülaltoodud pildilt näha, on esimene kirje uuendatud Joe Thomaselt Joeks.

CodeSüütaja Kustuta aktiivne kirje

Nüüd kustutame andmebaasist kirje. Kustutame kirje ID-ga 3. Lisage ActiveRecordControllerile järgmine meetod:

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

echo 'order has successfully been deleted';
}

siin:

  • $this->db->where('id', 3); määrab where-klausli.
  • $this->db->delete('orders'); kustutab andmebaasi rea tellimuste tabelist where-klausliga määratud kriteeriumide alusel.

Ülaltoodud koodi käivitamiseks laadige järgmine URL oma veebibrauseris: http://localhost:3000/ar/delete.

KKK

Active Record seob väärtused parameetritena, selle asemel et neid SQL-stringiks liita, seega ei saa kasutaja sisend päringu struktuuri muuta. See escaping toimub sisestamise, värskendamise ja asukoha puhul automaatselt.

Jah. Active Record genereerib SQL-i iga mootori jaoks draiveri kaudu, seega lülitudes ühelt MySQL SQL Serverile üleminek tähendab tavaliselt konfiguratsiooni, mitte mudelikoodi muutmist, kui väldite müüjaspetsiifilist SQL-i.

WHERE-klausel piirab ridu, milliseid lause mõjutab. Ilma selleta rakendatakse uuendamise või kustutamise käske tabeli iga rea ​​​​kaudu, mis on levinud ja kulukas viga.

Jah. Tehisintellekt saab SELECT-, INSERT-, UPDATE- või DELETE-käsu ümber kirjutada samaväärseks get-, insert-, update- või delete-ahelaks. Testi tulemust, kuna keerukate ühenduste puhul võib tavalise Active Recordi asemel vaja minna päringu koostajat.

Andmebaasiteegi automaatne laadimine muudab $this->db kättesaadavaks igas kontrolleris ja mudelis ilma seda iga kord laadimata. See on mugav, kui suurem osa rakendusest suhtleb andmebaasiga.

Võta see postitus kokku järgmiselt: