CodeΕνεργή εγγραφή Igniter: Εισαγωγή, Ενημέρωση, Διαγραφή ερωτήματος
⚡ Έξυπνη Σύνοψη
CodeΤο Igniter Active Record είναι ένα μοτίβο σχεδίασης που επιτρέπει σε ένα μοντέλο να διαβάζει και να γράφει στη βάση δεδομένων με απλές, ασφαλείς αλυσίδες μεθόδων. Υποστηρίζει την εισαγωγή, την επιλογή, την ενημέρωση και τη διαγραφή σε διαφορετικές μηχανές βάσεων δεδομένων χωρίς επανεγγραφή κώδικα και παραμετροποιεί την είσοδο για να αποτρέψει την εισαγωγή SQL.

Τα δεδομένα αποτελούν την κινητήρια δύναμη των περισσότερων εφαρμογών. Πρέπει να αποθηκεύονται ώστε να μπορούν να αναλυθούν για να παρέχουν πληροφορίες και να διευκολύνουν τη λήψη επιχειρηματικών αποφάσεων. Τα δεδομένα συνήθως αποθηκεύονται σε μια βάση δεδομένων. Μεταξύ των κύριων ανησυχιών κατά την αλληλεπίδραση με τη βάση δεδομένων είναι η ασφάλεια, η ευκολία πρόσβασης και οι εφαρμογές της Δομημένης Γλώσσας Ερωτημάτων (SQL) που αφορούν συγκεκριμένα τους προμηθευτές της βάσης δεδομένων.
Το Active Record είναι ένα πρότυπο σχεδίασης που διευκολύνει την αλληλεπίδραση με τη βάση δεδομένων με ασφαλή και εύγλωττο τρόπο. Το Active Record έχει τα ακόλουθα πλεονεκτήματα:
- Εισαγωγή, ενημέρωση και διαγραφή εγγραφών με απλές αλυσίδες μεθόδων.
- Υποβάλλει με ασφάλεια τα δεδομένα εισόδου του χρήστη χρησιμοποιώντας παραμέτρους.
- Σας επιτρέπει να εργάζεστε με πολλαπλές μηχανές βάσης δεδομένων, όπως π.χ MySQL και SQL Server χωρίς να ξαναγραφεί ο κώδικας της εφαρμογής.
- CodeΤο Igniter χρησιμοποιεί προγράμματα οδήγησης ειδικά για κάθε μηχανή βάσης δεδομένων στο παρασκήνιο.
Πώς να χρησιμοποιήσετε την ενεργή εγγραφή: Παράδειγμα
Σε αυτό το σεμινάριο, θα χρησιμοποιήσουμε ένα δείγμα βάσης δεδομένων με δύο πίνακες, έναν με παραγγελίες και έναν με λεπτομέρειες. Αυτό το σεμινάριο προϋποθέτει ότι έχετε ένα MySQL Η βάση δεδομένων είναι εγκατεστημένη και εκτελείται. Εκτελέστε τα ακόλουθα σενάρια για να δημιουργήσετε τη βάση δεδομένων του εκπαιδευτικού υλικού:
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;
Ο παραπάνω κώδικας δημιουργεί μια βάση δεδομένων με το όνομα ci_active_record και δύο πίνακες, τους orders και order_details. Η σχέση μεταξύ των δύο πινάκων ορίζεται από το id στήλης στο orders και το order_id στο order_details.
CodeΡύθμιση παραμέτρων βάσης δεδομένων ανάφλεξης
Θα ρυθμίσουμε τώρα την εφαρμογή μας ώστε να επικοινωνεί με αυτήν τη βάση δεδομένων. Ανοίξτε το αρχείο διαμόρφωσης βάσης δεδομένων που βρίσκεται στο application/config/database.php και εντοπίστε τις ακόλουθες γραμμές:
'hostname' => 'localhost', 'username' => '', 'password' => '', 'database' => '',
Ενημερώστε τον παραπάνω κώδικα στα εξής:
'hostname' => 'localhost', 'username' => 'root', 'password' => 'letmein', 'database' => 'ci_active_record',
Σημείωση: θα χρειαστεί να αντικαταστήσετε το όνομα χρήστη και τον κωδικό πρόσβασης με αυτά που ταιριάζουν με το δικό σας MySQL διαμόρφωση.
Εκτός από τις λεπτομέρειες διαμόρφωσης της βάσης δεδομένων, πρέπει επίσης να πούμε CodeIgniter για φόρτωση της βιβλιοθήκης βάσεων δεδομένων κατά τη φόρτωση.
Βήμα 1) Ανοίξτε το ακόλουθο αρχείο: application/config/autoload.php.
Βήμα 2) Εντοπίστε τις βιβλιοθήκες κλειδιών πίνακα $autoload και φορτώστε τη βιβλιοθήκη βάσης δεδομένων όπως φαίνεται παρακάτω:
$autoload['libraries'] = array('database');
Εδώ:
- Ο παραπάνω κώδικας φορτώνει τη βιβλιοθήκη βάσεων δεδομένων κατά την εκκίνηση της εφαρμογής.
CodeΕνεργή εγγραφή εισαγωγής ανάφλεξης
Για σκοπούς δοκιμής, θα δημιουργήσουμε έναν ελεγκτή και θα ορίσουμε διαδρομές για αλληλεπίδραση με την εφαρμογή μας μέσω του Active Record. Δημιουργήστε ένα νέο αρχείο application/controllers/ActiveRecordController.php και προσθέστε τον ακόλουθο κώδικα:
<?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'; } }
Εδώ:
- $data = […] ορίζει μια μεταβλητή πίνακα δεδομένων που χρησιμοποιεί ονόματα στηλών πίνακα βάσης δεδομένων ως κλειδιά πίνακα και τους αντιστοιχίζει τιμές.
- $this->db->insert('orders', $data); καλεί τη μέθοδο insert της βιβλιοθήκης βάσης δεδομένων, μεταβιβάζοντας το όνομα πίνακα orders και τη μεταβλητή πίνακα $data. Αυτή η γραμμή δημιουργεί την πρόταση SQL INSERT χρησιμοποιώντας τα κλειδιά πίνακα ως ονόματα πεδίων και τις τιμές πίνακα ως τιμές που θα εισαχθούν.
Τώρα που έχουμε δημιουργήσει τη μέθοδο ελεγκτή, πρέπει να δημιουργήσουμε μια διαδρομή που θα καλέσουμε για να την εκτελέσουμε. Ανοίξτε το application/config/routes.php και προσθέστε την ακόλουθη γραμμή:
$route['ar/insert'] = 'activerecordcontroller/store_order';
Εδώ:
- Ορίζουμε μια διαδρομή ar/insert που καλεί τη μέθοδο store_order του ActiveRecordController.
Ας ξεκινήσουμε τώρα τον διακομιστή ιστού για να δοκιμάσουμε τη μέθοδό μας. Εκτελέστε την ακόλουθη εντολή για να ξεκινήσετε τον ενσωματωμένο διακομιστή PHP:
cd C:\Sites\ci-app php -S localhost:3000
Εδώ:
- Η παραπάνω εντολή μεταβαίνει στον κατάλογο του έργου και εκκινεί τον ενσωματωμένο διακομιστή στη θύρα 3000.
Φορτώστε τα ακόλουθα URL στο πρόγραμμα περιήγησής σας: http://localhost:3000/ar/insert. Θα έχετε το ακόλουθο αποτέλεσμα:
order has successfully been created
Ανοίξτε το MySQL στη βάση δεδομένων του εκπαιδευτικού υλικού και ελέγξτε τον πίνακα παραγγελιών. Θα δείτε τη νέα σειρά που δημιουργήθηκε, όπως φαίνεται στην παρακάτω εικόνα:
CodeΕνεργή εγγραφή επιλογής ανάφλεξης
Σε αυτήν την ενότητα, θα δούμε πώς να διαβάζουμε τις εγγραφές στη βάση δεδομένων και να τις εμφανίζουμε στο πρόγραμμα περιήγησης ιστού ως μη ταξινομημένη λίστα. Προσθέστε την ακόλουθη μέθοδο στον 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>"; }
Εδώ:
- $query = $this->db->get('orders'); εκτελεί το ερώτημα επιλογής στον πίνακα παραγγελιών, επιλέγοντας όλα τα πεδία.
- ηχώ Καταχώριση παραγγελιών "; εμφανίζει μια επικεφαλίδα HTML.
- ηχώ "; εκτυπώνει την ετικέτα ανοίγματος για μια μη ταξινομημένη λίστα HTML.
- foreach ($query->result() as $row) {…} κάνει επανάληψη στα αποτελέσματα που επιστρέφονται από τη βάση δεδομένων και echo “ $row->όνομα_πελάτη "; εκτυπώνει το όνομα_πελάτη.
Πριν φορτώσετε το URL, μπορείτε να προσθέσετε μερικές ακόμη εγγραφές στη βάση δεδομένων. Ας ορίσουμε τώρα μια διαδρομή για το ερώτημα SELECT. Ανοίξτε το application/config/routes.php και προσθέστε την ακόλουθη διαδρομή:
$route['ar'] = 'activerecordcontroller';
Εδώ:
- Η διαδρομή ar δείχνει στη μέθοδο index της κλάσης ActiveRecordController. Αυτή είναι η προεπιλογή, γι' αυτό και δεν καθορίσαμε τη μέθοδο index, όπως κάναμε για τη διαδρομή που εισάγει εγγραφές.
Υποθέτοντας ότι ο διακομιστής ιστού λειτουργεί ήδη, φορτώστε τα ακόλουθα URL: http://localhost:3000/arΘα πρέπει να δείτε αποτελέσματα παρόμοια με τα ακόλουθα στο πρόγραμμα περιήγησης ιστού σας:
CodeΕνεργή εγγραφή ενημέρωσης ανάφλεξης
Σε αυτήν την ενότητα, θα μιλήσουμε για το πώς να χρησιμοποιήσετε το Active Record για να ενημερώσετε τη βάση δεδομένων. Ας υποθέσουμε ότι θέλουμε να ενημερώσουμε το όνομα πελάτη Joe Thomas σε Joe. Προσθέστε την ακόλουθη μέθοδο στην κλάση 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'; }
Εδώ:
- Η $data = […] ορίζει τα πεδία και τις τιμές που θέλουμε να ενημερώσουμε στον πίνακα της βάσης δεδομένων.
- $this->db->where('id', 1); ορίζει τον όρο where του ερωτήματος ενημέρωσης.
- $this->db->update(' orders', $data); δημιουργεί το ερώτημα ενημέρωσης SQL και το εκτελεί στη βάση δεδομένων μας.
Ο παραπάνω κώδικας παράγει την ακόλουθη πρόταση SQL:
UPDATE orders SET customer_name = 'Joe' WHERE id = 1;
Ας ενημερώσουμε τώρα το application/config/routes.php και ας προσθέσουμε την ακόλουθη διαδρομή:
$route['ar/update'] = 'activerecordcontroller/update_order';
Αποθηκεύστε τις αλλαγές και φορτώστε τα παρακάτω URL στο πρόγραμμα περιήγησης ιστού:
Ας εμφανίσουμε τώρα τα αρχεία της βάσης δεδομένων και ας δούμε αν η αλλαγή έχει τεθεί σε ισχύ.
Όπως μπορείτε να δείτε από την παραπάνω εικόνα, η πρώτη εγγραφή έχει ενημερωθεί από Joe Thomas σε Joe.
CodeΔιαγραφή ενεργής εγγραφής από το Igniter
Θα διαγράψουμε τώρα μια εγγραφή από τη βάση δεδομένων. Θα διαγράψουμε την εγγραφή με αναγνωριστικό 3. Προσθέστε την ακόλουθη μέθοδο στον ActiveRecordController:
public function delete_order() { $this->db->where('id', 3); $this->db->delete('orders'); echo 'order has successfully been deleted'; }
Εδώ:
- $this->db->where('id', 3); ορίζει τον όρο where.
- $this->db->delete('orders'); διαγράφει τη γραμμή της βάσης δεδομένων στον πίνακα παραγγελιών με βάση τα κριτήρια που έχουν οριστεί χρησιμοποιώντας τη ρήτρα where.
Για να εκτελέσετε τον παραπάνω κώδικα, φορτώστε τα παρακάτω URL στο πρόγραμμα περιήγησής σας στο διαδίκτυο: http://localhost:3000/ar/delete.




