CodeSytyttimen aktiivinen tietue: Lisää, päivitä, poista kysely

⚡ Älykäs yhteenveto

CodeIgniter Active Record on suunnittelumalli, jonka avulla malli voi lukea ja kirjoittaa tietokantaan yksinkertaisten ja turvallisten metodiketjujen avulla. Se tukee lisäystä, valintaa, päivitystä ja poistamista eri tietokantamoottorien välillä ilman koodin uudelleenkirjoittamista, ja se parametrisoi syötteen SQL-injektion estämiseksi.

  • 🔗 Perusidea: Active Record käärii SQL:n metodikutsuihin, kuten insert, get, update ja delete.
  • 🛡️ Secure: Arvot välitetään parametreina, mikä suojaa SQL-injektiolta.
  • 🔄 Kannettava: Sama koodi toimii kaikkialla MySQL, SQL Server ja muut tietokanta-ajureiden kautta.
  • ⚙️ Setup: Määritä database.php ja lataa tietokantakirjasto automaattisesti.
  • Aseta: $this->db->insert('table', $data) muodostaa ja suorittaa INSERT-komennon.
  • 🔍 Valitse: $this->db->get('table') palauttaa rivit, joita silmukka käyttää.
  • ✏️ Päivitä ja poista: Where-lauseke sekä update- tai delete-lauseke muuttavat tai poistavat rivejä.

CodeSytyttimen aktiivinen tietue CRUD

Data on useimpien sovellusten ydin. Se on tallennettava, jotta sitä voidaan analysoida oivallusten saamiseksi ja liiketoimintapäätösten helpottamiseksi. Data tallennetaan yleensä tietokantaan. Tietokannan kanssa vuorovaikutuksessa tärkeimpiä huolenaiheita ovat turvallisuus, helppokäyttöisyys ja tietokannan toimittajakohtaiset Structured Query Language (SQL) -toteutukset.

Active Record on suunnittelumalli, joka helpottaa tietokannan kanssa vuorovaikuttamista turvallisella ja selkeällä tavalla. Active Recordilla on seuraavat edut:

  • Lisää, päivitä ja poista tietueita yksinkertaisilla metodiketjuilla.
  • Lähettää käyttäjän syötteen turvallisesti parametrien avulla.
  • Voit työskennellä useiden tietokantaohjelmien kanssa, kuten MySQL ja SQL Server ilman sovelluskoodin uudelleenkirjoittamista.
  • CodeIgniter käyttää taustalla kullekin tietokantamoottorille ominaisia ​​ajureita.

Aktiivisen tietueen käyttö: esimerkki

Tässä opetusohjelmassa käytämme esimerkkitietokantaa, jossa on kaksi taulukkoa, joista toinen sisältää tilaukset ja toinen tiedot. Tässä opetusohjelmassa oletetaan, että sinulla on MySQL tietokanta on asennettu ja käynnissä. Luo opetusohjelman tietokanta suorittamalla seuraavat komentosarjat:

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;

Yllä oleva koodi luo tietokannan nimeltä ci_active_record ja kaksi taulukkoa, orders ja order_details. Kahden taulukon välinen suhde määritellään orders-taulukon saraketunnuksella ja order_details-taulukon order_id-arvolla.

CodeSytyttimen tietokannan konfigurointi

Määritämme nyt sovelluksemme kommunikoimaan tämän tietokannan kanssa. Avaa tietokannan määritystiedosto, joka sijaitsee tiedostossa application/config/database.php, ja etsi seuraavat rivit:

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

Päivitä yllä oleva koodi seuraavaan muotoon:

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

Huomautus: sinun on vaihdettava käyttäjätunnus ja salasana vastaaviin MySQL kokoonpano.

Tietokannan kokoonpanotietojen lisäksi meidän on myös kerrottava CodeSytytin tietokantakirjaston lataamiseksi latauksen yhteydessä.

Vaihe 1) Avaa seuraava tiedosto: application/config/autoload.php.

Vaihe 2) Etsi $autoload-taulukon avainkirjastot ja lataa tietokantakirjasto alla olevan kuvan mukaisesti:

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

Tässä:

  • Yllä oleva koodi lataa tietokantakirjaston sovelluksen käynnistyessä.

CodeSytytin Lisää aktiivinen tietue

Testaustarkoituksiin luomme ohjaimen ja määrittelemme reitit, joiden avulla voimme olla vuorovaikutuksessa sovelluksemme kanssa Active Recordin kautta. Luo uusi tiedosto application/controllers/ActiveRecordController.php ja lisää siihen seuraava koodi:

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

Tässä:

  • $data = […] määrittää taulukkomuuttujan data, joka käyttää tietokannan taulukon sarakenimiä taulukkoavaimina ja antaa niille arvot.
  • $this->db->insert('orders', $data); kutsuu tietokantakirjaston insert-metodia ja välittää taulukon nimen orders ja taulukkomuuttujan $data. Tämä rivi luo SQL INSERT -lausekkeen käyttäen taulukkoavaimia kenttäniminä ja taulukon arvoja lisättävinä arvoina.

Nyt kun olemme luoneet ohjainmetodin, meidän on luotava reitti, jota kutsumme sen suorittamiseksi. Avaa application/config/routes.php ja lisää seuraava rivi:

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

Tässä:

  • Määrittelemme reitin ar/insert, joka kutsuu ActiveRecordControllerin store_order-metodia.

Käynnistetään nyt web-palvelin menetelmämme testaamiseksi. Suorita seuraava komento käynnistääksesi sisäänrakennetun PHP-palvelimen:

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

Tässä:

  • Yllä oleva komento selaa projektihakemistoon ja käynnistää sisäänrakennetun palvelimen portissa 3000.

Lataa seuraavat URL selaimeesi: http://localhost:3000/ar/insertSaat seuraavan tuloksen:

order has successfully been created

Avaa MySQL tutoriaalin tietokantaan ja tarkista tilaustaulukko. Näet juuri luodun rivin, kuten alla olevassa kuvassa näkyy:

Uusi tilausrivi lisätty aktiivisen tietueen kautta

CodeSytytin Valitse aktiivinen tietue

Tässä osiossa näemme, kuinka tietokannan tietueet luetaan ja näytetään verkkoselaimessa järjestämättömänä luettelona. Lisää seuraava metodi ActiveRecordControlleriin:

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

Tässä:

  • $query = $this->db->get('orders'); suorittaa valintakyselyn orders-taulukkoa vastaan ​​ja valitsee kaikki kentät.
  • kaiku “ Tilauslistaus ”; näyttää HTML-otsikon.
  • kaiku “ ”; tulostaa järjestämättömän HTML-luettelon avaavan tagin.
  • foreach ($query->result() as $row) {…} käy läpi tietokannasta palautetut tulokset ja echo “ $rivi->asiakkaan_nimi ”; tulostaa asiakkaan_nimen.

Ennen kuin lataat URL, voit lisätä tietokantaan muutaman tietueen lisää. Määritellään nyt reitti SELECT-kyselylle. Avaa application/config/routes.php ja lisää seuraava reitti:

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

Tässä:

  • Reitti ar osoittaa ActiveRecordController-luokan index-metodiin. Tämä on oletusarvoinen, minkä vuoksi emme määrittäneet index-metodia, kuten teimme tietueita lisäävälle reitille.

Olettaen, että web-palvelin on jo käynnissä, lataa seuraava URL: http://localhost:3000/arSinun pitäisi nähdä verkkoselaimessasi seuraavanlaisia ​​tuloksia:

Tilaukset listattu aktiivisen tietueen kautta

CodeSytyttimen päivityksen aktiivinen tietue

Tässä osiossa käsittelemme Active Recordin käyttöä tietokannan päivittämiseen. Oletetaan, että haluamme päivittää asiakkaan nimen Joe Thomas muotoon Joe. Lisää seuraava metodi ActiveRecordController-luokkaan:

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

Tässä:

  • $data = […] määrittää kentät ja arvot, jotka haluamme päivittää tietokantataulukossa.
  • $this->db->where('id', 1); määrittää päivityskyselyn where-lausekkeen.
  • $this->db->update('tilaukset', $data); luo SQL-päivityskyselyn ja suorittaa sen tietokantaamme vastaan.

Yllä oleva koodi tuottaa seuraavan SQL-lausekkeen:

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

Päivitetään nyt application/config/routes.php ja lisätään seuraava reitti:

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

Tallenna muutokset ja lataa seuraavat URL verkkoselaimessa:

Tilaus päivitetty onnistuneesti -viesti

Näytämme nyt tietokannan tiedot ja katsomme, ovatko muutokset tulleet voimaan.

Tilausluettelo, jossa näkyy päivitetty nimi

Kuten yllä olevasta kuvasta näkyy, ensimmäinen tietue on päivitetty Joe Thomasista Joeksi.

CodeSytytin Poista aktiivinen tietue

Poistamme nyt tietueen tietokannasta. Poistamme tietueen, jonka id on 3. Lisää seuraava metodi ActiveRecordControlleriin:

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

echo 'order has successfully been deleted';
}

Tässä:

  • $this->db->where('id', 3); asettaa where-lausekkeen.
  • $this->db->delete('orders'); poistaa tietokannan rivin orders-taulukosta where-lausekkeen avulla asetettujen kriteerien perusteella.

Suorittaaksesi yllä olevan koodin, lataa seuraava URL verkkoselaimessasi: http://localhost:3000/ar/delete.

UKK

Active Record sitoo arvot parametreina sen sijaan, että ne ketjutettaisiin SQL-merkkijonoksi, joten käyttäjän syöte ei voi muuttaa kyselyn rakennetta. Tämä escaping tapahtuu automaattisesti lisäyksen, päivityksen ja sijainnin osalta.

Kyllä. Active Record luo SQL:n ajurin kautta kullekin moottorille, joten vaihtaminen MySQL SQL Serveriin siirtyminen tarkoittaa yleensä kokoonpanon, ei mallikoodin, muuttamista, kunhan vältät toimittajakohtaista SQL:ää.

Where-lauseke rajoittaa, mihin riveihin lauseke vaikuttaa. Ilman sitä päivitys- tai poistokomento suoritetaan taulukon jokaiselle riville, mikä on yleinen ja kallis virhe.

Kyllä. Tekoäly voi kirjoittaa SELECT-, INSERT-, UPDATE- tai DELETE-käskyn uudelleen vastaavaksi get-, insert-, update- tai delete-ketjuksi. Testaa tulosta, koska monimutkaiset liitokset saattavat tarvita kyselyn luontityökalua yksinkertaisen Active Record -tietueen sijaan.

Tietokantakirjaston automaattinen lataus tekee $this->db-komennon saataville kaikissa ohjaimissa ja malleissa ilman, että sitä ladataan joka kerta. Tämä on kätevää, kun suurin osa sovelluksesta on yhteydessä tietokantaan.

Tiivistä tämä viesti seuraavasti: