CodeIgniter Active Record: Lekérdezés beszúrása, frissítése, törlése

⚡ Okos összefoglaló

CodeAz Igniter Active Record egy tervezési minta, amely lehetővé teszi a modell számára az adatbázis egyszerű, biztonságos metódusláncokkal történő olvasását és írását. Támogatja a beszúrást, kiválasztást, frissítést és törlést különböző adatbázismotorok között a kód átírása nélkül, és paraméterezi a bemenetet az SQL injektálás megakadályozása érdekében.

  • 🔗 Alapötlet: Az Active Record az SQL-t olyan metódushívásokba csomagolja, mint az insert, get, update és delete.
  • 🛡️ Biztonságos: Az értékek paraméterként kerülnek átadásra, ami védelmet nyújt az SQL injektálás ellen.
  • 🔄 Hordozható: Ugyanaz a kód működik mindenhol MySQL, SQL Server és mások adatbázis-illesztőprogramokon keresztül.
  • 🇧🇷 Beállítás: Konfiguráld a database.php fájlt, és töltsd be automatikusan az adatbázis-könyvtárat.
  • beszúrása: A $this->db->insert('table', $data) egy INSERT függvényt hoz létre és futtat.
  • 🔍 Kiválasztás: A $this->db->get('table') függvény visszaadja a cikluson átívelő sorokat.
  • ✏️ Frissítés és törlés: Egy where záradék, valamint az update vagy delete utasítás módosítja vagy eltávolítja a sorokat.

CodeIgniter Active Record CRUD

Az adat a legtöbb alkalmazás vérvonala. Tárolni kell, hogy elemezhető legyen, betekintést nyújtson és megkönnyítse az üzleti döntéseket. Az adatokat általában egy adatbázisban tárolják. Az adatbázissal való interakció során a fő szempontok közé tartozik a biztonság, a könnyű hozzáférés és az adatbázis-gyártókra jellemző SQL (Structured Query Language) implementáció.

Az Active Record egy olyan tervezési minta, amely megkönnyíti az adatbázissal való interakciót, biztonságos és könnyen érthető módon. Az Active Record a következő előnyökkel rendelkezik:

  • Rekordok beszúrása, frissítése és törlése egyszerű metódusláncokkal.
  • Biztonságosan küldi el a felhasználói bemenetet paraméterek használatával.
  • Lehetővé teszi, hogy több adatbázis-motorral dolgozzon, mint pl MySQL és az SQL Server az alkalmazáskód átírása nélkül.
  • CodeAz Igniter az egyes adatbázismotorokhoz tartozó illesztőprogramokat használja a háttérben.

Az Active Record használata: Példa

Ebben az oktatóanyagban egy két táblával rendelkező minta adatbázist fogunk használni, az egyikben a megrendelések, a másikban a részletek vannak. Ez az oktatóanyag feltételezi, hogy van egy MySQL adatbázis telepítve és fut. Futtassa a következő szkripteket a bemutató adatbázis létrehozásához:

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;

A fenti kód létrehoz egy ci_active_record nevű adatbázist, valamint két táblát, az orders és az order_details táblát. A két tábla közötti kapcsolatot az orders táblában található oszlopazonosító és az order_details táblában található order_id határozza meg.

CodeGyújtó adatbázis konfiguráció

Most konfiguráljuk az alkalmazásunkat, hogy kommunikáljon ezzel az adatbázissal. Nyissuk meg az application/config/database.php mappában található adatbázis-konfigurációs fájlt, és keressük meg a következő sorokat:

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

Frissítsd a fenti kódot a következőre:

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

Jegyzet: a felhasználónevet és jelszót a sajátoddal megegyezőre kell cserélned. MySQL konfiguráció.

Az adatbázis-konfiguráció részletein kívül azt is meg kell mondanunk, hogy CodeIgniter az adatbáziskönyvtár betöltéséhez, amikor az betöltődik.

Step 1) Nyisd meg a következő fájlt: application/config/autoload.php.

Step 2) Keresse meg az $autoload tömbkulcs-könyvtárakat, és töltse be az adatbázis-könyvtárat az alábbiak szerint:

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

Itt:

  • A fenti kód betölti az adatbáziskönyvtárat az alkalmazás indulásakor.

CodeGyújtó Aktív rekord beszúrása

Tesztelési célokból létrehozunk egy vezérlőt, és útvonalakat definiálunk az alkalmazásunkkal való interakcióhoz az Active Recordon keresztül. Hozz létre egy új fájlt: application/controllers/ActiveRecordController.php, és add hozzá a következő kódot:

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

Itt:

  • A $data = […] egy olyan tömbváltozót definiál, amely az adatbázistábla oszlopneveit használja tömbkulcsként, és értékeket rendel hozzájuk.
  • A $this->db->insert('orders', $data); meghívja az adatbáziskönyvtár INSERT metódusát, átadva az orders táblanevet és a $data tömbváltozót. Ez a sor létrehozza az SQL INSERT utasítást, amely a tömbkulcsokat használja mezőnevekként, a tömbértékeket pedig beszúrandó értékekként.

Most, hogy létrehoztuk a vezérlő metódust, létre kell hoznunk egy útvonalat, amelyet meghívunk a végrehajtásához. Nyissuk meg az application/config/routes.php fájlt, és adjuk hozzá a következő sort:

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

Itt:

  • Definiálunk egy ar/insert útvonalat, amely meghívja az ActiveRecordController store_order metódusát.

Most indítsuk el a webszervert a módszerünk teszteléséhez. Futtassuk a következő parancsot a beépített PHP szerver elindításához:

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

Itt:

  • A fenti parancs a projektkönyvtárba navigál, és a 3000-es porton elindítja a beépített szervert.

Töltsd be a következőket URL a böngésződbe: http://localhost:3000/ar/insertA következő eredményt fogja kapni:

order has successfully been created

Nyissa meg a MySQL oktatóanyag adatbázisát, és ellenőrizze a megrendelések táblázatát. Látni fogja az újonnan létrehozott sort, ahogy az az alábbi képen látható:

Új rendelési sor beszúrva az aktív rekordon keresztül

CodeGyújtó Aktív rekord kiválasztása

Ebben a szakaszban azt fogjuk látni, hogyan olvashatjuk be az adatbázis rekordjait, és hogyan jeleníthetjük meg azokat a webböngészőben rendezetlen listaként. Adjuk hozzá a következő metódust az ActiveRecordControllerhez:

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

Itt:

  • $query = $this->db->get('orders'); lefuttatja a kiválasztó lekérdezést az orders táblán, kiválasztva az összes mezőt.
  • visszhang „ Rendelések listázása ”; egy HTML címsort jelenít meg.
  • visszhang „ ”; kinyomtatja egy rendezetlen HTML lista nyitó címkéjét.
  • foreach ($query->result() as $row) {…} végigmegy az adatbázisból visszaadott eredményeken, és echo „ $sor->ügyfél_neve ”; kinyomtatja a customer_name értéket.

Mielőtt betöltenéd a URL, további rekordokat adhatsz hozzá az adatbázishoz. Most definiáljunk egy útvonalat a SELECT lekérdezéshez. Nyisd meg az application/config/routes.php fájlt, és add hozzá a következő útvonalat:

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

Itt:

  • Az „ar” útvonal az ActiveRecordController osztály index metódusára mutat. Ez az alapértelmezett, ezért nem adtuk meg az index metódust, ahogyan azt a rekordokat beszúró útvonal esetében tettük.

Feltételezve, hogy a webszerver már fut, töltse be a következőket URL: http://localhost:3000/arA webböngészőjében az alábbihoz hasonló eredményeket kell látnia:

Az Aktív rekordon keresztül kiválasztott rendelések listája

CodeGyújtó frissítés aktív rekord

Ebben a szakaszban arról lesz szó, hogyan használható az Active Record az adatbázis frissítéséhez. Tegyük fel, hogy a Joe Thomas ügyfélnevet Joe-ra szeretnénk frissíteni. Adjuk hozzá a következő metódust az ActiveRecordController osztályhoz:

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

Itt:

  • A $data = […] paraméter határozza meg az adatbázistáblában frissíteni kívánt mezőket és értékeket.
  • $this->db->where('id', 1); beállítja a frissítő lekérdezés where záradékát.
  • $this->db->update('rendelések', $adat); generálja az SQL frissítési lekérdezést, és végrehajtja azt az adatbázisunkban.

A fenti kód a következő SQL utasítást állítja elő:

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

Frissítsük most az application/config/routes.php fájlt, és adjuk hozzá a következő útvonalat:

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

Mentse el a módosításokat, és töltse be a következőket URL a webböngészőben:

A rendelés sikeresen frissítve üzenet

Most jelenítsük meg az adatbázisrekordokat, és nézzük meg, hogy a módosítás érvénybe lépett-e.

A frissített nevet mutató rendelések listája

Amint a fenti képen látható, az első rekord Joe Thomasról Joe-ra frissült.

CodeGyújtó Aktív rekord törlése

Most törölni fogunk egy rekordot az adatbázisból. Törölni fogjuk a 3-as azonosítójú rekordot. Adjuk hozzá a következő metódust az ActiveRecordControllerhez:

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

echo 'order has successfully been deleted';
}

Itt:

  • $this->db->where('id', 3); beállítja a where záradékot.
  • $this->db->delete('orders'); törli az adatbázis sorát az orders táblában a where záradékkal beállított kritériumok alapján.

A fenti kód végrehajtásához töltse be a következőt URL a webböngésződben: http://localhost:3000/ar/delete.

GYIK

Az Active Record paraméterként köti az értékeket ahelyett, hogy egy SQL karakterláncba fűzné őket, így a felhasználói bevitel nem módosíthatja a lekérdezés struktúráját. Ez a kilépésping automatikusan megtörténik a beszúrás, frissítés és a hely esetében.

Igen. Az Active Record minden egyes motorhoz külön illesztőprogramon keresztül generálja az SQL-t, így a váltás a következőről: MySQL Az SQL Serverre való átállás általában a konfiguráció megváltoztatását jelenti, nem a modellkódét, feltéve, hogy elkerülöd a gyártóspecifikus SQL-t.

A where záradék korlátozza, hogy az utasítás mely sorokat érinti. Enélkül egy frissítés vagy törlés a tábla minden sorára lefut, ami egy gyakori és költséges hiba.

Igen. A mesterséges intelligencia átírhat egy SELECT, INSERT, UPDATE vagy DELETE műveletet a megfelelő get, insert, update vagy delete láncolatként. Teszteld az eredményt, mivel az összetett illesztésekhez szükség lehet a lekérdezésszerkesztőre az egyszerű Active Record helyett.

Az adatbáziskönyvtár automatikus betöltése a $this->db függvényt minden vezérlőben és modellben elérhetővé teszi anélkül, hogy minden alkalommal be kellene tölteni. Ez akkor kényelmes, ha az alkalmazás nagy része az adatbázissal kommunikál.

Foglald össze ezt a bejegyzést a következőképpen: