CodeIgniter Active Record: Запрос на вставку, обновление и удаление

⚡ Умное резюме

CodeIgniter Active Record — это шаблон проектирования, позволяющий модели читать и записывать данные в базу данных с помощью простых и безопасных цепочек методов. Он поддерживает операции вставки, выбора, обновления и удаления данных в различных системах управления базами данных без переписывания кода, а также параметризует входные данные для предотвращения SQL-инъекций.

  • 🔗 Основная идея: Active Record использует SQL в качестве обертки для вызовов методов, таких как insert, get, update и delete.
  • 🛡️ Безопасность: Значения передаются в качестве параметров, что обеспечивает защиту от SQL-инъекций.
  • 🔄 Портативный: Один и тот же код работает во всех средах. MySQLSQL Server и другие через драйверы баз данных.
  • ⚙️ Настроить: Настройте файл database.php и включите автоматическую загрузку библиотеки базы данных.
  • Вставьте: $this->db->insert('table', $data) создает и выполняет операцию INSERT.
  • 🔍 Выберите: Функция `$this->db->get('table')` возвращает строки для перебора в цикле.
  • 🇧🇷 Обновить и удалить: Условие WHERE в сочетании с командами UPDATE или DELETE изменяет или удаляет строки.

CodeIgniter Active Record 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 конфигурации.

Помимо сведений о конфигурации базы данных, нам также необходимо сообщить следующее: 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.

CodeIgniter Select Active Record

В этом разделе мы рассмотрим, как считывать записи из базы данных и отображать их в веб-браузере в виде неупорядоченного списка. Добавьте следующий метод в 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'); выполняет запрос SELECT к таблице orders, выбирая все поля.
  • эхо « Список заказов ”; отображает заголовок HTML.
  • эхо « ";" выводит открывающий тег для неупорядоченного HTML-списка.
  • Цикл foreach ($query->result() as $row) {…} перебирает результаты, возвращаемые из базы данных, и выводит " $row->customer_name ""; выводит customer_name.

Перед загрузкой 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');` удаляет строку в таблице заказов на основе критериев, заданных с помощью условия `where`.

Для выполнения приведенного выше кода загрузите следующее. URL в вашем веб-браузере: http://localhost:3000/ar/delete.

Часто задаваемые вопросы (FAQ)

Active Record связывает значения в качестве параметров, а не объединяет их в строку SQL, поэтому ввод пользователя не может изменить структуру запроса. Это приводит к...ping Это происходит автоматически для операций вставки, обновления и определения места.

Да. Active Record генерирует SQL-запросы через драйвер для каждого движка, поэтому переключение с одного движка на другой нецелесообразно. MySQL Переход на SQL Server обычно означает изменение конфигурации, а не кода модели, при условии, что вы избегаете SQL-запросов, специфичных для конкретного поставщика.

Условие WHERE ограничивает круг строк, на которые влияет данное выражение. Без него обновление или удаление будет выполняться для каждой строки в таблице, что является распространенной и дорогостоящей ошибкой.

Да. Искусственный интеллект может переписать запросы SELECT, INSERT, UPDATE или DELETE в виде эквивалентных цепочек запросов get, insert, update или delete. Проверьте результат, поскольку для сложных соединений может потребоваться построитель запросов, а не простая запись Active Record.

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

Подведем итог этой публикации следующим образом: