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 选择活动记录
在本节中,我们将了解如何读取数据库中的记录并将其作为无序列表显示在 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 更新活动记录
在本节中,我们将讨论如何使用活动记录来更新数据库。假设我们要将客户名称 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
现在让我们显示数据库记录并看看更改是否受到影响。
从上图可以看出,第一条记录已从 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
总结
在本教程中,您学习了如何使用活动记录来插入、更新、删除和从数据库中选择记录。我们使用静态值来创建、更新和删除记录。在下一个教程中,我们将创建一个用户界面,用户可以使用该界面在数据库中动态创建记录。