CodeАктивний запис Igniter: запит на вставку, оновлення, видалення
⚡ Розумний підсумок
CodeIgniter Active Record – це шаблон проектування, який дозволяє моделі зчитувати та записувати дані з бази даних за допомогою простих та безпечних ланцюжків методів. Він підтримує вставку, вибір, оновлення та видалення в різних механізмах баз даних без переписування коду, а також параметризує вхідні дані для запобігання SQL-ін'єкціям.

Дані є основою більшості програм. Їх потрібно зберігати, щоб їх можна було проаналізувати для отримання інформації та сприяння прийняттю бізнес-рішень. Дані зазвичай зберігаються в базі даних. Серед головних проблем під час взаємодії з базою даних є безпека, легкість доступу та реалізації мови структурованих запитів (SQL) для конкретних постачальників баз даних.
Active Record – це шаблон проектування, який спрощує взаємодію з базою даних безпечним та зрозумілим способом. Active Record має такі переваги:
- Вставляйте, оновлюйте та видаляйте записи за допомогою простих ланцюжків методів.
- Безпечно надсилає введені користувачем дані за допомогою параметрів.
- Дозволяє працювати з декількома механізмами баз даних, наприклад MySQL та SQL Server без переписування коду програми.
- CodeIgniter використовує драйвери, специфічні для кожного механізму баз даних, у фоновому режимі.
Як використовувати Active Record: приклад
У цьому посібнику ми використовуватимемо зразок бази даних з двома таблицями, одна з замовленнями, а інша з деталями. У цьому посібнику припускається, що у вас є 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Конфігурація бази даних Igniter
Тепер ми налаштуємо нашу програму для зв'язку з цією базою даних. Відкрийте файл конфігурації бази даних, розташований у application/config/database.php, і знайдіть такі рядки:
'hostname' => 'localhost', 'username' => '', 'password' => '', 'database' => '',
Оновіть наведений вище код до наступного:
'hostname' => 'localhost', 'username' => 'root', 'password' => 'letmein', 'database' => 'ci_active_record',
Примітка: вам потрібно буде замінити ім'я користувача та пароль на ті, що відповідають вашому MySQL configuration.
Окрім деталей конфігурації бази даних, нам також потрібно повідомити 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 = […] визначає змінну масиву 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'); виконує запит на вибірку для таблиці 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 для оновлення бази даних. Припустимо, що ми хочемо оновити ім'я клієнта Джо Томас на Джо. Додайте наступний метод до класу 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 у веббраузері:
Давайте тепер відобразимо записи бази даних і перевіримо, чи зміни набули чинності.
Як видно з зображення вище, перший запис було оновлено з Джо Томаса на Джо.
CodeВидалення активного запису запальника
Тепер ми видалимо запис з бази даних. Ми видалимо запис з ідентифікатором 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'); видаляє рядок бази даних у таблиці orders на основі критеріїв, встановлених за допомогою речення where.
Щоб виконати наведений вище код, завантажте наступний код URL у вашому веббраузері: http://localhost:3000/ar/delete.




