CodeIgniter Active Record: Kueri Penyisipan, Pembaruan, dan Penghapusan

⚡ Ringkasan Cerdas

CodeIgniter Active Record adalah pola desain yang memungkinkan model untuk membaca dan menulis ke basis data dengan rantai metode yang sederhana dan aman. Ia mendukung operasi insert, select, update, dan delete di berbagai mesin basis data tanpa perlu menulis ulang kode, dan ia memparameterisasi input untuk mencegah injeksi SQL.

  • 🔗 Ide Inti: Active Record membungkus SQL dalam panggilan metode seperti insert, get, update, dan delete.
  • 🛡️ Aman: Nilai-nilai diteruskan sebagai parameter, yang melindungi dari serangan SQL injection.
  • 🔄 Portabel: Kode yang sama berfungsi di berbagai platform. MySQL, SQL Server, dan lainnya melalui driver basis data.
  • ⚙️ Setup: Konfigurasikan file database.php dan muat otomatis pustaka basis data.
  • ➕ Memasukkan: $this->db->insert('table', $data) membangun dan menjalankan perintah INSERT.
  • 🔍 Pilih: $this->db->get('table') mengembalikan baris yang akan diulang.
  • ️ Perbarui dan Hapus: Klausul where ditambah update atau delete mengubah atau menghapus baris.

CodeIgniter Active Record CRUD

Data adalah urat nadi sebagian besar aplikasi. Data perlu disimpan agar dapat dianalisis untuk memberikan wawasan dan memfasilitasi keputusan bisnis. Data biasanya disimpan dalam basis data. Di antara kekhawatiran utama saat berinteraksi dengan basis data adalah keamanan, kemudahan akses, dan implementasi Structured Query Language (SQL) yang spesifik untuk vendor basis data.

Active Record adalah pola desain yang memudahkan interaksi dengan basis data secara aman dan efisien. Active Record memiliki keunggulan sebagai berikut:

  • Sisipkan, perbarui, dan hapus data dengan rangkaian metode sederhana.
  • Mengirimkan input pengguna secara aman menggunakan parameter.
  • Memungkinkan Anda bekerja dengan beberapa mesin basis data seperti MySQL dan SQL Server tanpa perlu menulis ulang kode aplikasi.
  • CodeIgniter menggunakan driver khusus untuk setiap mesin basis data di latar belakang.

Cara Menggunakan Active Record: Contoh

Dalam tutorial ini, kita akan menggunakan contoh basis data dengan dua tabel, satu berisi pesanan dan yang lainnya berisi detail. Tutorial ini mengasumsikan Anda memiliki MySQL Basis data telah terpasang dan berjalan. Jalankan skrip berikut untuk membuat basis data 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;

Kode di atas membuat basis data bernama ci_active_record dan dua tabel, orders dan order_details. Hubungan antara kedua tabel tersebut didefinisikan oleh kolom id di orders dan order_id di order_details.

CodeKonfigurasi Basis Data Igniter

Sekarang kita akan mengkonfigurasi aplikasi kita untuk berkomunikasi dengan basis data ini. Buka file konfigurasi basis data yang terletak di application/config/database.php dan temukan baris-baris berikut:

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

Perbarui kode di atas menjadi seperti berikut:

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

Catatan: Anda perlu mengganti nama pengguna dan kata sandi dengan yang sesuai dengan milik Anda. MySQL konfigurasi.

Selain detail konfigurasi basis data, kita juga perlu memberi tahu CodeIgniter akan memuat pustaka basis data saat dimuat.

Langkah 1) Buka file berikut: application/config/autoload.php.

Langkah 2) Temukan pustaka kunci array $autoload dan muat pustaka basis data seperti yang ditunjukkan di bawah ini:

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

Sini:

  • Kode di atas memuat pustaka basis data saat aplikasi dimulai.

CodeIgniter Sisipkan Rekaman Aktif

Untuk keperluan pengujian, kita akan membuat controller dan mendefinisikan rute untuk berinteraksi dengan aplikasi kita melalui Active Record. Buat file baru application/controllers/ActiveRecordController.php dan tambahkan kode berikut:

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

Sini:

  • $data = […] mendefinisikan variabel array data yang menggunakan nama kolom tabel database sebagai kunci array dan menetapkan nilai ke dalamnya.
  • $this->db->insert('orders', $data); memanggil metode insert dari pustaka basis data, dengan meneruskan nama tabel orders dan variabel array $data. Baris ini menghasilkan pernyataan SQL INSERT menggunakan kunci array sebagai nama field dan nilai array sebagai nilai yang akan disisipkan.

Setelah membuat metode controller, kita perlu membuat rute yang akan kita panggil untuk mengeksekusinya. Buka application/config/routes.php dan tambahkan baris berikut:

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

Sini:

  • Kita mendefinisikan sebuah rute ar/insert yang memanggil metode store_order dari ActiveRecordController.

Sekarang mari kita mulai server web untuk menguji metode kita. Jalankan perintah berikut untuk memulai server PHP bawaan:

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

Sini:

  • Perintah di atas akan masuk ke direktori proyek dan memulai server bawaan pada port 3000.

Muat yang berikut ini URL ke dalam browser Anda: http://localhost:3000/ar/insertAnda akan mendapatkan hasil berikut:

order has successfully been created

Buka MySQL Gunakan tutorial basis data dan periksa tabel pesanan. Anda akan melihat baris yang baru dibuat, seperti yang ditunjukkan pada gambar di bawah ini:

Baris pesanan baru dimasukkan melalui Active Record.

CodeIgniter Pilih Rekam Aktif

Pada bagian ini, kita akan melihat cara membaca data dalam basis data dan menampilkannya di peramban web sebagai daftar tak berurutan. Tambahkan metode berikut ke 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>";
}

Sini:

  • $query = $this->db->get('orders'); menjalankan kueri select terhadap tabel orders, memilih semua kolom.
  • gema “ Daftar Pesanan ”; menampilkan judul HTML.
  • gema “ ”; mencetak tag pembuka untuk daftar HTML yang tidak terurut.
  • foreach ($query->result() as $row) {…} mengulang melalui hasil yang dikembalikan dari basis data, dan echo “ $baris->nama_pelanggan ”; mencetak customer_name.

Sebelum Anda memuat URLAnda dapat menambahkan beberapa catatan lagi ke basis data. Sekarang mari kita definisikan rute untuk kueri SELECT. Buka application/config/routes.php dan tambahkan rute berikut:

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

Sini:

  • Rute `ar` mengarah ke metode `index` dari kelas `ActiveRecordController`. Ini adalah pengaturan default, itulah sebabnya kita tidak menentukan metode `index`, seperti yang kita lakukan untuk rute yang menyisipkan data.

Dengan asumsi server web sudah berjalan, muat yang berikut ini. URL: http://localhost:3000/arAnda akan melihat hasil yang mirip dengan berikut ini di peramban web Anda:

Daftar pesanan yang dipilih melalui Active Record

CodePembaruan Igniter Active Record

Pada bagian ini, kita akan membahas cara menggunakan Active Record untuk memperbarui basis data. Misalkan kita ingin memperbarui nama pelanggan Joe Thomas menjadi Joe. Tambahkan metode berikut ke kelas 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';
}

Sini:

  • $data = […] mendefinisikan kolom dan nilai yang ingin kita perbarui dalam tabel basis data.
  • $this->db->where('id', 1); menetapkan klausa where dari kueri pembaruan.
  • $ini->db->update('pesanan', $data); menghasilkan kueri pembaruan SQL dan menjalankannya terhadap database kami.

Kode di atas menghasilkan pernyataan SQL berikut:

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

Sekarang mari kita perbarui application/config/routes.php dan tambahkan rute berikut:

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

Simpan perubahan dan muat yang berikut ini URL di peramban web:

Pesan pesanan berhasil diperbarui

Sekarang mari kita tampilkan catatan basis data dan lihat apakah perubahan tersebut telah berlaku.

Daftar pesanan yang menampilkan nama yang diperbarui

Seperti yang Anda lihat pada gambar di atas, catatan pertama telah diperbarui dari Joe Thomas menjadi Joe.

CodeIgniter Hapus Catatan Aktif

Sekarang kita akan menghapus sebuah data dari basis data. Kita akan menghapus data dengan id 3. Tambahkan metode berikut ke ActiveRecordController:

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

echo 'order has successfully been deleted';
}

Sini:

  • $this->db->where('id', 3); mengatur klausa where.
  • $this->db->delete('orders'); menghapus baris dalam tabel orders berdasarkan kriteria yang ditetapkan menggunakan klausa where.

Untuk menjalankan kode di atas, muat hal-hal berikut ini. URL di peramban web Anda: http://localhost:3000/ar/delete.

Pertanyaan Umum Demo Slot

Active Record mengikat nilai sebagai parameter alih-alih menggabungkannya ke dalam string SQL, sehingga input pengguna tidak dapat mengubah struktur kueri. Hal ini dapat menyebabkan masalah.ping terjadi secara otomatis untuk insert, update, dan where.

Ya. Active Record menghasilkan SQL melalui driver untuk setiap mesin, jadi beralih dari MySQL Mengubah konfigurasi ke SQL Server biasanya berarti mengubah konfigurasi, bukan kode model, selama Anda menghindari SQL khusus vendor.

Klausul WHERE membatasi baris mana yang akan dipengaruhi oleh pernyataan tersebut. Tanpa klausa ini, pembaruan atau penghapusan akan dijalankan pada setiap baris dalam tabel, yang merupakan kesalahan umum dan mahal.

Ya. AI dapat menulis ulang perintah SELECT, INSERT, UPDATE, atau DELETE sebagai rangkaian perintah get, insert, update, atau delete yang setara. Uji hasilnya, karena join yang kompleks mungkin memerlukan query builder daripada Active Record sederhana.

Fitur autoloading library database membuat `$this->db` tersedia di setiap controller dan model tanpa perlu memuatnya setiap kali. Ini sangat praktis karena sebagian besar aplikasi berkomunikasi dengan database.

Ringkaslah postingan ini dengan: