封装数据库操作类(读操作)|学习笔记

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 快速学习封装数据库操作类(读操作)

开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第一阶段封装数据库操作类(读操作)】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/711/detail/12682


封装数据库操作类(读操作)

 

内容介绍:

一、读取一条记录简介

二、读取一条记录代码详解及测试

三、读取多条记录简介

四、读取多条记录代码详解及测试

 

一、读取一条记录简介

1.读操作可以将数据分为两种:

(1)读取一条记录

(2)读取多条记录

2.读取操作:读取一条记录,无论何种操作都利用 check() 进行 SQL 执行和错误检查。读取一条数据可能需要获取当前查询结果的列数(该记录的字段数),增加属性保留

 

二、读取一条记录代码详解

1. 方法一:

#属性:记录查询结果中的列数

Public  $columns = 0;

//默认为0列;完成这条数据的读取操作。细节在于是否要取 $columns 里的列数,如果不需要,则该行代码和读取记录列数可去除

#读操作:一条记录

pullic function read_one($sql){

$res = $this->check($sl1);

//读取一条记录执行 SQL 错误检查

#读取记录列数

$this->columns = @mysqli_ field_ count($this->1ink);
//检查结束之后利用 mysqli_ field_ count() 从中取出列数;观察 $res 是否为真,若为真,则 check() 将会返回一个结果及对象,因为本课讲的是查,读取数据

#判定结果,进行加工:成功读取一条记录,失败返回空数组

return $res ? mysqli_ _fetch_ assoc($res) : [];

//读取数据获取了该对象,如果有记录将取出一条记录,否则将会返回空数组。空数组代表没有数据;为了让外部能够获取到有可能是错误信息,可以直接返回 $res ,因为 $res 可能是 false ,所以空数组或者返回错误信息均可,错误信息即为 false 。

}

2. 方法二

#读操作:一条记录

public $columns = 0;

//增加属性 $columns(是否等于0都可以,等于0代表刚开始列数为0)

pullic function read_one($sql){

//每读取一条都执行 SQL 错误检查;得到的结果为执行的最终过程,如果细致做,成功的时候有自增长对应的列数,可先判定(该判定可与方法一逻辑不同,下列数据表示即使没有数据取出也为0条)

$res = $this->check($sql);

#判定结果

if($res){

#说明有结果

$this->columns = @mysqli_ field_ count($this->link);
//读取记录列数;@错误抑制符,避免内部细节出错;从 mysqli_ field_ count()中取出列数,放至属性中保存,所以应增加属性 columns;成功读取一条记录

}

#没有结果

return false;

//return $res,因为 $res 也是 false ,但使用 return false 比 return $res 快,所以自行决断;完成读取一条记录

}

}

3. 测试

(1)代码:

#接上述代码(类外测试)

$s1 = new SqL();         #使用默认数据库信息

$db =array(

'host' => ' 192.168.0.1',

‘user ' => 'admin”,

‘pass’=>’admin ' ,

‘dbname' => ' T aobao '

);

$s2 = new SqL ($db) ;#使用外部数据库信息

$s1- >connect();

$s1->charset();

$res = $s1->read_one(‘desc t_40');  

echo $s1->errno,$s1->error ;

Var_dump($res) #观察有哪些字段

(2)讲解:

添加代码$res = $s1->read_one(‘desc t_40'); 观察读取是否能够实现,如果能实现则会显示一个数组$res,

添加代码Var_dump($res)

“Field”取出了其中一条“id”字段(不完整, id 只是其中一条字段),但说明数据查询已经正确无误,只要 SQL 正确,就能实现操作

 

三、读取多条记录简介

读取操作:读取多条记录:可能外部需要知道查询结果的总记录数以及查询结果的列数(属性已定义)

在学习的过程中会发现属性的增加

 

四、读取多条记录代码详解及测试

1.代码

#读取多条记录,在学习的过程中会发现属性的增加

#属性:记录查询结果的行数

public $rows = 0;

//读操作;使用的方法由外部选择,下述只负责读取多条记录

public function read_a11($sql){

$res = $this->check($sql);

//执行过程与执行一条类似;执行 SQL 错误检查,使用 check() 检查有无语法问题并执行

#如果有问题,错误检查

#判定结果,进行加工

if(!$res) return $res;

//如果没有结果(错误),$res 是 false,就直 接 return 返回 false (错误),否则说明有结果;完成多维数组:将总记录数提取出,然后把它循环遍历放至 $list[] 里,最后返回 $list[];如果外部得到 false,则应该检查 errno 和 error ,因为 false 是 check()所传递的,所以 check() 里已经记录了错误信息

#记录结果数量

#结果正确

$this->rows = @mysqli_num_rows($res);

$this->columns =@mysqli_field_count($this->link);

//结果正确,取出行数(取行函数:mysqli_num_rows(),对 $ros 结果及对象取行,而非从链接取行)和列数(取列函数 mysqli_field_count());为保证安全可加入@;上述俩行代码只取出了辅助性的东西,核心是循环取出所有记录

#循环取出所有记录:形成二维数组

$list = [];

while($row = mysqli_fetch_assoc($res)) $list[] = $row;

//根据需求解析数据;while()表循环,从 mysqli_fetch_assoc()(结果及对象)中取记录,放至二维数组 list 中;因为代码只有一行,所以未写对应循环和大括号,只需要保持代码逻辑正确即可省略大括号

#所有记录都存入 list 后,返回结果

return  $list;

}

}

2. 测试:

(1)代码:

#接上述代码(类外测试)

$s1 = new SqL();         #使用默认数据库信息

$db =array(

'host' => ' 192.168.0.1',

‘user ' => 'admin”,

‘pass’=>’admin ' ,

‘dbname' => ' T aobao '

);

$s2 = new SqL ($db) ;#使用外部数据库信息

$s1- >connect();

$s1->charset();

$res = $s1->read_all(‘desc t_40');  

echo $s1->errno,$s1->error ;

#上三行代码为受影响的行数,并在下述代码中打印出

echo $s1-> insert_ id();

Var_dump($res)    #观察有哪些字段

(2)讲解:

读取操作:读取多条记录的内容结束。

测试:发现 read_one 和 read_all (所有)本质是名字不同。不考虑内部实现

所以 $res = $s1->read_one(‘desc t_40');改为 $res = $s1->read_all(‘desc t_40');

Array(5):说明有5个对应数据

五个字段:第一个:id,第二个:name,第三个:gender,第四个:age,第五个:classname

image.png

因为有五个字段即可证明查操作无问题,所以可以测试写操作

加入代码$res = $s1->write("insert  into  t_40  values(null, 'name ','男',18,'classname ')");

//字段一:null;字段二:name;字段三:男(因为gender中只有男,女,保密);字段四:18(age);字段五:classname (班级名)

$res = $s1->write("insert  into  t_40  values(null, 'name ','男',18,'classname ')");

改错代码( SQL 语句出错,观察是否可执行):$res = $s1->write("insertinto  t_40  values(null, 'name ','男',18,'classname ')");

执行结果告知:

将错误信息输出,错误点为 insertinto

将代码改正确:$res = $s1->write("insert  into  t_40  values(null, 'name ','男',18,'classname ')");

因为代码正常情况下为自增长id,所以需要增加代码 echo $s1-> insert_ id();

Id 为15,说明 id 已经获取

若有疑虑可再次刷新发现 id 为16,所以说明自增长 id 可以得到

此时就完成了整个对应内容的书写,基本上增删改查的功能需求都结束了。

当然业务并没有很完整,在完成本课内容之后,可以先实现测试的功能性,在操作的过程中已经完成了实现测试的功能性。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
存储 关系型数据库 MySQL
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
144 0
|
6月前
|
关系型数据库 MySQL 数据库
Linux C/C++ 开发(学习笔记七):Mysql数据库C/C++编程实现 插入/读取/删除
Linux C/C++ 开发(学习笔记七):Mysql数据库C/C++编程实现 插入/读取/删除
129 0
|
27天前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
104 6
|
27天前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
62 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
2月前
|
SQL 关系型数据库 MySQL
php学习笔记-连接操作mysq数据库(基础)-day08
本文介绍了PHP中连接操作MySQL数据库的常用函数,包括连接服务器、设置字符集、关闭连接、选择数据库、结果集释放、获取影响行数以及遍历结果集等操作。通过书籍查询的实例演示了如何使用这些函数进行数据库操作,并提供了一个PHP操纵MySQL数据库的模板。
php学习笔记-连接操作mysq数据库(基础)-day08
|
3月前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
53 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
|
3月前
|
SQL Java 关系型数据库
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
106 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
|
3月前
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
37 6
|
3月前
|
存储 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
46 4
|
3月前
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(中)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
30 3