简化CI数据库操作,提高开发效率 (ci数据库操作)


现代软件开发的复杂性和规模越来越高,如何提高开发效率和缩短开发周期成为了每个开发人员和团队的共同问题。在这个过程中,数据库操作往往是一个很耗费时间和精力的环节,尤其是对于大型应用和数据量庞大的数据库。本篇文章将介绍如何通过简化CodeIgniter(CI)框架的数据库操作,提高开发效率和代码质量。

1. CI数据库操作简介

CodeIgniter是一个轻量级的PHP框架,自带了强大的数据库类库,可以方便地进行数据读取、写入、更新和删除等操作。CI使用了Active Record的设计模式,将数据操作映射到类的方法中,使得代码更加直观和易于维护。但是,CI的数据库操作也存在一些问题,例如:

– Active Record的方法名和参数存在一定的限制和局限性,可能无法满足特定的SQL需求;

– 数据表和字段的写法必须遵循一定的规范和格式,可能会造成代码的冗余和复杂性;

– 操作数据表的方法存在嵌套和连贯的问题,可能会增加代码的深度和复杂度;

– 对于复杂的数据库操作,需要手动拼接SQL语句,容易出现错误和安全问题。

这些问题都会影响开发效率和代码质量,为此,我们需要进行一些改进和优化。

2. 简化CI数据库操作的方法

为了简化CI数据库操作,我们可以采用一些有用的方法和技巧,例如:

2.1 引入Query Builder

CodeIgniter 3.0以上版本中,引入了Query Builder类,它是一种更加灵活和易用的数据库操作方式,可以方便地构造SQL语句并执行查询。使用Query Builder的好处有:

– 不限制方法和参数,可以使用任意的SQL语句和查询条件;

– 可以使用各种流畅接口(Fluent Interfaces)和函数式编程(Functional Programming)的方法,使得代码更加简洁和易读;

– 支持事务和错误处理,可以有效地保证数据操作的安全和正确性。

因此,我们建议在CI项目中尽可能使用Query Builder而不是Active Record来进行数据库操作。以下是一些使用Query Builder的例子:

// 初始化Query Builder对象

$this->db->select(‘name, eml’);

$this->db->from(‘users’);

$this->db->where([‘id’=>$id, ‘status’=>1]);

$this->db->limit(10);

$result = $this->db->get()->result_array();

// 使用Query Builder插入数据

$data = [

‘name’ => ‘Peter’,

’eml’ => ‘peter@example.com’,

‘created_at’ => date(‘Y-m-d H:i:s’)

];

$this->db->insert(‘users’, $data);

// 使用Query Builder更新数据

$data = [

‘name’ => ‘John’,

’eml’ => ‘john@example.com’,

‘updated_at’ => date(‘Y-m-d H:i:s’)

];

$this->db->where(‘id’, $id);

$this->db->update(‘users’, $data);

2.2 使用ORM框架

ORM(Object-Relational Mapping)框架是一种将对象和关系型数据表进行映射的方法,可以将数据库操作转换为面向对象的操作,使得代码更加清晰和易于维护。在CI项目中,我们可以使用一些流行的ORM框架来简化数据库操作,例如:

– Doctrine:一个全面性的ORM框架,支持多种数据库和高级查询语言;

– Eloquent:Laravel框架自带的ORM框架,拥有流畅的查询接口和方便的数据操作方法;

– CodeIgniter-Doctrine:CI框架的Doctrine封装,提供了类似Active Record的数据操作方式。

使用ORM框架的好处有:

– 代码风格更加清晰和易于维护,可以避免手写SQL语句和复杂的数据操作方法;

– 可以提高代码的复用性和灵活性,支持多种查询方式和扩展方法;

– 支持对象的自动映射和关联,可以方便地处理复杂的数据结构和关系。

以下是使用Eloquent框架的例子:

// 定义模型类

class User extends \Illuminate\Database\Eloquent\Model {

protected $table = ‘users’;

protected $fillable = [‘name’, ’eml’, ‘password’];

public function profile() {

return $this->hasOne(Profile::class);

}

}

class Profile extends \Illuminate\Database\Eloquent\Model {

protected $table = ‘user_profiles’;

protected $fillable = [‘age’, ‘gender’, ‘phone’];

public function user() {

return $this->belongsTo(User::class);

}

}

// 查询用户信息及其关联数据

$user = User::with(‘profile’)->find(1);

echo $user->name . ‘ age is ‘ . $user->profile->age;

// 新建用户并关联数据

$user = User::create([

‘name’ => ‘John’,

’eml’ => ‘john@example.com’,

‘password’ => ‘123456’

]);

$user->profile()->create([

‘age’ => 25,

‘gender’ => ‘male’,

‘phone’ => ‘1234567890’

]);

2.3 封装常用操作

在开发过程中,我们通常需要进行一些常见的数据库操作,如查询分页、批量更新、批量插入等。为了提高开发效率和代码质量,我们可以将这些操作封装成类库或扩展,以便更方便地复用和调用。以下是一些常用的CI数据库操作封装方法:

– Pagination:封装了CI的分页查询功能,支持自定义分页大小和样式;

– Bulk Update:封装了CI的批量更新功能,支持快速更新大量数据;

– Batch Insert:封装了CI的批量插入功能,支持快速插入大量数据;

– Query Debug:封装了CI的调试功能,支持打印执行的SQL语句和耗时信息。

这些封装方法可以在不增加太多代码和复杂度的情况下,提高代码的复用性和开发效率。例如,使用Pagination类库可以在简单的几行代码中实现分页功能:

// 引入Pagination类库

$this->load->library(‘pagination’);

// 设置分页参数

$config[‘base_url’] = base_url(‘/users’);

$config[‘total_rows’] = $this->db->count_all(‘users’);

$config[‘per_page’] = 10;

// 初始化分页类

$this->pagination->initialize($config);

// 查询数据并显示分页

$data[‘users’] = $this->db->get(‘users’, $config[‘per_page’], $this->uri->segment(3));

$this->load->view(‘users’, $data);

echo $this->pagination->create_links();

3.

通过上述方法和技巧,我们可以有效地和代码质量。需要注意的是,CI数据库操作虽然简单易用,但仍然需要谨慎处理,避免出现数据安全和性能问题。因此,在开发过程中,需要对数据表和字段进行规范和合理设计,对数据操作和查询进行优化和测试,以确保代码的正确和可靠。

相关问题拓展阅读:

  • CI的session生成后放在哪
  • sql server 2023怎么建数据库

CI的session生成后放在哪

CI的session生成后,默认放在数据库,cookie放在客户端

  CI的session 信息默认是放在cookie里吧,只有在config.php启用数据库才把session_data 和user_data 放在数据库。

  Session 类可以使用户在浏览您的网站时,维持他们的状态并跟踪他们的行为。 Session 类将每个用户的 session 信息序列化(serialize)后存储到到 cookie 中(并同时进行加密)。 您还可以将 session 数据存储到数据库中来增强安全性,但是这时要求存储在用户 cookie 中的 session ID 值能与数据库中存储的用户 session ID 值相匹配。程序默认只在 cookie 中存储 session。如果您要在数据库中存储 session 的话,需要按照下面指示的方法,在您的数据库中创建需要的数据表。

CI的session 信息默认是放在cookie里吧,只有在config.php启用数据库才把session_data 和user_data 放在数据库。

你用 IE 的 Internet 设置里的查看文件夹来查看。

sql server 2023怎么建数据库

、启用FileTable

  1、修改数据库引擎属性

  打SQL Server配置管理器修改SQL Server数据库引擎属性使用页针 Microsoft SQL Server 2023安装启用 FILESTREAM

  (1)针 Transact-SQL 访问启用 FILESTREAM

  选项针 Transact-SQL 访问启用 FILESTREAM 必须选控制选项才能使用其控制选项启用选项能添加FileStream文件组

  (2)针文件 I/O 流访问启用 FILESTREAM

  选项针 FILESTREAM 启用 Win32 流访问

  (3)Windows 共享名

  使用控制选项输入用存储 FILESTREAM 数据 Windows 共享名称默认该SQL Server实例名称

  (4)允许远程客户端针 FILESTREAM 数据启用流访问

  选控制选项允许远程客户端访问服务器 FILESTREAM 数据

  

  2、修改服务器属性

  打SQL Server Management Studio修改该实例配置默认配置:

  述选项解释:

  (1)FILESTREAM 访问级别显示 SQL Server 实例支持 FILESTREAM 前级别若要更改访问级别请选择值:

  已禁用

  二进制型象 (BLOB) 数据存储文件系统默认值即filestream access level=0

  已启用 Transact-SQL 访问

  使用 Transact-SQL 访问 FILESTREAM 数据能通文件系统进行访问即filestream access level=1

  已启用完全访问

  FILESTREAM 数据使用 Transact-SQL 及通文件系统进行访问即filestream access level=0

  注意:首启用 FILESTREAM 您能需要重新启计算机才能配置驱程序

  (2)FILESTREAM 共享名称显示安装程选择 FILESTREAM 共享读名称

  

  本实验我FILESTREAM 访问级别 设定:已启用完全访问

  通T-SQL脚本执行则运行脚本:

  EXEC sys.sp_configure N’filestream access level’, N’2′

  RECONFIGURE WITH OVERRIDE

  

  注意:设置完重启实例

  

  3、配置防火墙

  若要防火墙保护环境使用 FILESTREAM客户端服务器都必须能够 DNS 名称解析包含 FILESTREAM 文件服务器FILESTREAM 要求 Windows 文件共享端口处于打状态

  

  二、配置文件组

  1、添加文件组

  完述操作该数据库添加专用于FileStream文件组

  通脚本操作请运行脚本:

  ALTER DATABASE ADD FILEGROUP CONTAINS FILESTREAM

  

  2、添加文件

  完述操作该数据库添加FilStream类型数据库文件

  本例系统并没FileStream数据文件类型创建mdf或ndf文件文件夹C:\SqlData面自创建逻辑名称命名文件夹即 C:\SqlData\FileData其filestream.hdr 文件 FILESTREAM 容器文件数据库删除mdf、ndf、log连同文件夹都删除

  通脚本操作请运行脚本:

  ALTER DATABASE ADD FILE ( NAME = N’FileData’, FILENAME = N’C:\SqlData\FileData’ ) TO FILEGROUP

  注意:例运行脚本前必须存C:\SqlData建议使用右侧选择按钮选择路径路径存报错:

  同能存重复文件夹即能存C:\SqlData\FileData否则报错:

  

  3、启非事务访问

  FileTable 使 Windows 应用程序获取 FILESTREAM 数据 Windows 文件句柄需要 SQL Server 事务允许 SQL Server 存储文件进行非事务性访问必须要包含 FileTable 每数据库数据库级别指定所需非事务性访问级别

  选项解释:

  (1)FILESTREAM 非事务访问

  文件系统 FileTables 存储 FILESTREAM 数据非事务性访问指定选项:OFF、READ_ON 或 FULL

  服务器未启用 FILESTREAM则该值设置 OFF 并且禁用本实验其设置FULL

  (2)FILESTREAM 目录名称

  与所选数据库相关联 FILESTREAM 数据指定目录名称 FileTable 文件夹层结构数据库级目录实例级别 FILESTREAM 指定共享名称级及数据库创建 FileTable 父级

  启用非事务性访问没提供目录名称则必须提供才能数据库创建 FileTable

  通脚本执行:

  ALTER DATABASE db01

  SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N’ImageFiles’ )

  注意:更改现数据库调用带 DIRECTORY_NAME FILESTREAM 选项 ALTER DATABASE (Transact-SQL) 语句使用些选项更改目录名称数据库必须独占式锁定没打文件句柄

  说明:检查否数据库启用非事务性访问查询目录视图脚本:

  SELECT DB_NAME(database_id), non_transacted_access, non_transacted_access_desc

  FROM sys.database_filestream_options

  

  三、创建FileTable

  1、创建第FileTable

  SQL Server Management Studio提供脚本模板要想创建FileTable用脚本完:

  USE db01

  CREATE TABLE ImageTable1 AS FILETABLE

  官范本:

  USE

  CREATE TABLE . AS FILETABLE ON FILESTREAM_ON

  WITH

  (FILETABLE_DIRECTORY = N’ImageTable1′, FILETABLE_COLLATE_FILENAME = Chinese_PRC_CI_AS)

  

  2、创建第二FileTable

  CREATE TABLE ImageTable2 AS FILETABLE

  

  3、获取共享路径

  文件表创建相应产文件表共享目录该目录路径通内建函数获取:

  SELECT FileTableRootPath(‘ImageTable1’)

  本实验所返结:\\SQL1\SqlFile\ImageFiles\ImageTable1

  

  4、查看

  通Windows资源管理器见已经创建GUID命名文件夹

  

  通SQL Server Management Studio查看表结构

  

  四、操作

  1、向文件夹添加文件

  通 Windows资源管理器向文件夹\\SQL1\SqlFile\ImageFiles\ImageTable1添加文件A01.GIF运行脚本:

  select * from ImageTable1

  结:

  

  见 SQL Server自Table添加记录

  

  2、文件改名

  运行脚本:

  update ImageTable1 set name=’Cup.GIF’ where name=’A01.GIF’

  通Windows资源管理器查看文件夹\\SQL1\SqlFile\ImageFiles\ImageTable1见文件A01.GIF已经改名Cup.GIF

  

  3、查看共享文件夹

  我继续复制其文件通Windows资源管理器查看文件夹

  

  4、删除文件

  使用脚本删除例:

  Delete ImageTable1 where name=’Cup.GIF’

  或者通Windows资源管理器直接删除该文件

  

  五、备份原

  

  1、备份数据库

  使用 SQL Server 备份数据库FILESTREAM 数据与数据库结构化数据起备份

  

  2、部备份

ci数据库操作的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于ci数据库操作,简化CI数据库操作,提高开发效率,CI的session生成后放在哪,sql server 2023怎么建数据库的信息别忘了在本站进行查找喔。