Codeigniter Active Record:插入、选择、更新、删除
数据是大多数应用程序的生命线。数据的存储方式必须能够进一步分析以提供见解并促进业务决策。数据通常存储在数据库中。与数据库交互时,主要关注点是安全性、易访问性和结构化查询语言 (SQL) 的数据库供应商特定实现。
Active record 是一种设计模式,可以轻松、安全、简洁地与数据库进行交互。
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。这两个表之间的关系由 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 数组键 libraries,然后按如下方式加载数据库库
$autoload['libraries'] = array('database');
此处,
- 上面的代码会在应用程序启动时加载数据库库
CodeIgniter 插入 Active Record
为了测试目的,我们将创建一个控制器并定义我们将用于通过 active record 与我们的应用程序交互的路由。
创建一个新文件 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 = […] 定义了一个数组变量 data,它使用数据库表名作为数组键并为它们赋值
- $this->db->insert(‘orders’, $data); 调用数据库库的 insert 方法,将表名 orders 和数组变量 $data 作为参数传递。此行使用数组键作为字段名,数组值作为要插入数据库的值来生成 SQL INSERT 语句。
现在我们已经成功创建了 active record 的控制器方法,现在我们需要创建一个路由来调用控制器方法。
现在打开 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
https://:3000/ar/insert
您将看到以下结果
order has successfully been created
打开 MySQL 教程数据库并检查 orders 表
您将能够看到新创建的行,如下图所示
CodeIgniter 选择 Active Record
在本节中,我们将介绍如何读取数据库中的记录并将它们显示在 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’); 对 orders 表运行 select 查询,选择所有字段
- echo “<h4>订单列表</h4>”; 显示一个大小为 3 的 HTML 标题
- echo “<ul>”; 打印无序 HTML 列表的开始标签
- foreach ($query->result() as $row) {…} 使用 for 循环遍历从数据库返回的结果。 echo “<li>$row->customer_name</li>”; 打印数据库中的 customer_name
在加载以下 URL 之前,您可以向数据库加载更多记录。
让我们现在为 SELECT 查询定义一个路由
打开 application/config/routes.php 表
添加以下路由
$route['ar'] = 'activerecordcontroller';
此处,
- 路由 ar 指向 ActiveRecordController 类的 index 方法。这是默认的,因此我们不需要像插入记录的路由那样指定 index 方法
假设 Web 服务器已在运行,请加载以下 URL
https://:3000/ar
您应该能够在 Web 浏览器中看到非常相似于以下内容的结果
CodeIgniter 更新 Active Record
在本节中,我们将讨论如何使用 active record 来更新数据库。假设我们要将客户名称 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 update 查询并针对我们的数据库执行它。
上面的代码将生成以下 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 删除 Active Record
现在我们将从数据库中删除一条记录。我们将删除 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 子句设置的标准删除 orders 表中的数据库行。
要执行上述代码,请在我们的 Web 浏览器中加载以下 URL
https://:3000/ar/delete
摘要
在本教程中,您已学习了如何使用 active record 从数据库插入、更新、删除和选择记录。我们使用了静态值来创建、更新和删除记录。在下一个教程中,我们将创建一个用户界面,供用户动态创建数据库记录。