Codeigniter Active Record:插入、选择、更新、删除

数据是大多数应用程序的命脉。数据需要以能够进一步分析的方式存储,以便提供见解并促进业务决策。数据通常存储在数据库中。与数据库交互时的主要关注点包括安全性、访问的便利性和数据库供应商特定的结构化查询语言 (SQL) 实现。

活动记录是一种设计模式,可以以轻松、安全且流畅的方式与数据库进行交互。

活动记录具有以下优点

  • 使用活动记录的简单方法链插入,更新和删除记录
  • 使用参数以安全的方式提交用户输入
  • 允许您使用多个数据库引擎,例如 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。两个表之间的关系由 orders 中的列 id 和 order_details 表中的 order_id 定义。

CodeIgniter 数据库配置

我们现在将配置我们的应用程序以便能够与该数据库通信。

打开位于 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');

这里,

  • 上述代码在应用程序启动时加载数据库库

CodeIgniter 插入活动记录

为了测试目的,我们将创建一个控制器并定义路由,我们将使用它通过活动记录与我们的应用程序进行交互。

创建新文件 application/controllers/ActiveRecordController.php

将以下代码添加到 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 中打开 routes.php

将以下行添加到路线中

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

这里,

  • 我们定义一个路由 ar/insert,调用 ActiveRecordController 的 store_order。

现在让我们启动 Web 服务器来测试我们的方法。

运行以下命令启动 PHP 内置服务器

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

这里,

  • 将上述命令浏览器转到命令行并在端口 3000 启动内置服务器。

将以下 URL 加载到浏览器中

http://localhost:3000/ar/insert

您将获得以下结果

order has successfully been created

打开 MySQL 教程数据库并检查订单表

您将能够新建行,如下图所示

CodeIgniter 插入活动记录

CodeIgniter 选择活动记录

在本节中,我们将了解如何读取数据库中的记录并将其作为无序列表显示在 Web 浏览器中

将以下方法添加到 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'); 针对订单表运行选择查询,选择所有字段
  • 回声“订单列表”;显示大小为 4 的 HTML 标题
  • 回声“ “;打印无序 HTML 列表的开始标签
  • foreach ($query->result() as $row) {…} 使用 for 循环循环遍历数据库返回的结果。echo “ $row->客户名称“;从数据库中打印出 customer_name

在加载以下 URL 之前,您可以将更多记录加载到数据库。

现在让我们为 SELECT 查询定义一个路由

打开 application/config/routes.php 表

添加以下路线

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

这里,

  • 路由 ar 指向 ActiveRecordController 类的 index 方法。默认情况下,这就是为什么我们没有像插入记录的路由那样指定 index 方法

假设 Web 服务器已在运行,则加载以下 URL

http://localhost:3000/ar

您应该能够在 Web 浏览器中看到与以下内容非常相似的结果

CodeIgniter 选择活动记录

CodeIgniter 更新活动记录

在本节中,我们将讨论如何使用活动记录来更新数据库。假设我们要将客户名称 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;

现在让我们更新 routes.php application/config/routes.php

添加以下路线

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

保存更改

在 Web 浏览器中加载以下 URL

CodeIgniter 更新活动记录

现在让我们显示数据库记录并看看更改是否受到影响。

CodeIgniter 更新活动记录

从上图可以看出,第一条记录已从 Joe Thomas 更新为 Joe。

CodeIgniter 删除活动记录

现在,我们将从数据库中删除一条记录。我们将删除 ID 为 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', 1); 设置 where 子句
  • $this->db->delete('orders'); 根据使用 where 子句设置的条件删除订单表中的数据库行。

要执行上述代码,请在我们的 Web 浏览器中加载以下 URL

http://localhost:3000/ar/delete

总结

在本教程中,您学习了如何使用活动记录来插入、更新、删除和从数据库中选择记录。我们使用静态值来创建、更新和删除记录。在下一个教程中,我们将创建一个用户界面,用户可以使用该界面在数据库中动态创建记录。

每日Guru99新闻简报

通过立即获取最新、最重要的人工智能新闻报道来开始您的一天。