CodeАктивний запис Igniter: запит на вставку, оновлення, видалення

⚡ Розумний підсумок

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

  • 🔗 Основна ідея: Active Record обгортає SQL у виклики методів, такі як insert, get, update та delete.
  • 🛡️ Безпека: Значення передаються як параметри, що захищає від SQL-ін'єкцій.
  • 🔄 портативний: Той самий код працює в усіх MySQL, SQL Server та інші через драйвери баз даних.
  • Установка: Налаштуйте database.php та автоматично завантажте бібліотеку бази даних.
  • Вставити: $this->db->insert('table', $data) створює та виконує INSERT.
  • 🔍 Виберіть: $this->db->get('table') повертає рядки для перебору.
  • ✏️ Оновлення та видалення: Речення where плюс оператори update або delete змінюють або видаляють рядки.

CodeАктивний запис Igniter CRUD

Дані є основою більшості програм. Їх потрібно зберігати, щоб їх можна було проаналізувати для отримання інформації та сприяння прийняттю бізнес-рішень. Дані зазвичай зберігаються в базі даних. Серед головних проблем під час взаємодії з базою даних є безпека, легкість доступу та реалізації мови структурованих запитів (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 базу даних навчального посібника та перевірте таблицю замовлень. Ви побачите щойно створений рядок, як показано на зображенні нижче:

Новий рядок замовлення вставлено через Active Record

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У вашому веббраузері ви повинні побачити результати, подібні до наведених нижче:

Список замовлень, вибраних через Active Record

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.

Поширені запитання

Active Record пов'язує значення як параметри, а не об'єднує їх у рядок SQL, тому введені користувачем дані не можуть змінити структуру запиту. Цей спосіб уникненняping відбувається автоматично для вставки, оновлення та де.

Так. Active Record генерує SQL через драйвер для кожного механізму, тому перехід з MySQL до SQL Server зазвичай означає зміну конфігурації, а не коду моделі, за умови, що ви уникаєте SQL, специфічного для певного постачальника.

Речення where обмежує, на які рядки впливає оператор. Без нього оновлення або видалення виконуватиметься для кожного рядка таблиці, що є поширеною та дороговартісною помилкою.

Так. Штучний інтелект може переписати SELECT, INSERT, UPDATE або DELETE як еквівалентний ланцюжок get, insert, update або delete. Перевірте результат, оскільки для складних об'єднань може знадобитися конструктор запитів, а не простий Active Record.

Автоматичне завантаження бібліотеки бази даних робить $this->db доступною в кожному контролері та моделі без її завантаження кожного разу. Це зручно, коли більшість програм взаємодіє з базою даних.

Підсумуйте цей пост за допомогою: