PHP基础知识3——数据库操作方式
1. 初识数据库概念
数据库基本概念
专门用来存储、管理数据的仓库(空间),按照数据结构来组织、存储和管理,可以实现高效存取数据。英文:Database, DB。
关系型数据库
当前使用范围最广的数据库。基于表, 按照关系模型(数据之间表与表存在联系)组织的数据库。
订单:订单编号,商品名称,价格,数量,配送地址
**订单编号** | 商品名称 | 价格 | 数量 | 配送地址 |
---|---|---|---|---|
100123 | 华为mate10 | 4999 | 2 | 北京市京顺路99号 |
100124 | 花裙子 | 499 | 1 | 北京市清华大学1号楼 |
-
关系型数据库: 基于表, 表与表之间可以存在关系进行多表查询的存储方式, 适合较为复杂的存储 mysql, SQL Server, oracle
-
非关系型 数据库: 基于键值对的存储方式, 数据之间没有耦合性, 特点执行效率高 mongodb
2. 数据库的组织架构
数据表(table)
表是以行和列的形式组织起来的数据的集合。项目一般需要不同的数据表,将数据分布存储在不同的数据表中。
数据库的数据存放在数据表中
如:订单表,用户表,商品表,配送地址表
记录-行(row,record)
我们把表中的每一行叫做一条“记录”
字段-列 (column,field)
字段是比记录更小的单位,多个字段集合组成记录, 即数据项
3. 关系型数据库—MySQL
数据库官网地址:https://dev.mysql.com
中文参考论坛:http://www.mysqlpub.com/
4. SQL-操作数据库的语言
SQL:structured Query Language 结构化查询语言。 SQL语句,相当于客户端发送的命令(与数据库服务器进行交互), 我们后面就是要学习 SQL 语句操作数据库。
-
.sql 数据库脚本语言的后缀。
-
主要是执行 数据操作的基本逻辑有:增删改查 操作
5. 数据库操作方式
数据库的相关设置: (打开数据库命令行,修改数据库密码等)
命令行演示(了解)
-
show databases;
-
use database;
-
show tables;
图形界面客户端
6. 数据库表的操作
6.1 数据库的数据类型
字段类型初步介绍
-
整型
存储如年龄,产品数量,编号等。 int
-
小数类型
float ,decimal eg. 重量,工资,奖金,价格等
使用decimal类型,实现小数的精确存储,一般用来存储与钱有关的数字。3.333333331
-
字符串型
varchar(M),char(M) M为该字段可以存储的最多字符数,如varchar(10)。
varchar一般用来存储长度变化比较大的字符串,如文章标题,商品名称,
char存储长度比较固定的字符串,如手机号,身份证号,序列号,邮编。
此外可以使用text类型,存储较长的字符串,无需指定字符串的具体长度。
-
日期时间型
datetime,date(年月日),time(时分秒)。年月日时分秒。
字段约束
字段约束: 字段数据的属性规则(特征)
-
not null 不为空
可以限制字段值不能为空
-
default 默认值,
可以设置字段的默认值,在没有录入时自动使用默认值填充。
-
primary key 主键 :唯一标识,不能重复,不能为空
设置字段为主键,主键字段的值不能重复,不能为空。而且一个数据表中只能设置一个字段为主键,作为每行记录的唯一身份信息(索引)。stu_id int primary key
-
auto_increment 自动增长
设置字段为自动增长,默认从1开始自动分配编号。自增长字段必须为一个key(索引,数据结构,便于快速查找数据,相当于书的目录),一般与primary key结合使用。
类型必须为整型。
-
unique key 不能重复
唯一键,设置字段的值为唯一的,可以设置多个字段为唯一键。唯一键字段的值可以为空。
学号设置为主键,要求唯一的,不能为空的,用来标识学生信息,
6.2 创建数据表
注意 创建表时,每个表必须有一个主键
保存表结构:
向新建的表中添加数据:
7. SQL
SQL编写注意点: 注释用 -- , 语句结束加分号(;)
增删改查
7.1 插入数据 insert
[code]-- insert into 表名 (字段列表) values (值列表) insert into book (name,author,category,price) values ('天龙八部','金庸','文学',20)
7.2 修改数据update
[code]-- update 表名 set 字段名称1=值1,字段名称2=值2,... where 条件 update book set name='笑傲江湖',price='30' where id=10
7.3 删除数据delete
[code]-- de 3ff7 lete from 表名 where 条件 delete from book where id=10
7.4 查询数据select
[code]-- select * from 表名 where 条件 select * from book where author='金庸' and price>20
8. SQL高级
8.1 where 条件
查询时,不添加 where 条件, 返回数据表所有行。需要添加限定条件,只返回需要的行。
[code]select 字段列表 from table where 条件;
8.2 Like 模糊匹配 % 通配符
[code]-- 查找姓张的人 select * from table where name like '张%';
8.3 in 语法:一次查询多个符合条件的数据
[code]select 字段列表 from tb where 字段 in (value1,value2,value3);
8.4 count() 获取返回数据的总条数
[code]-- 查询满足条件数据的总条数 select count(*) from table where 条件
8.5 排序
[code]select * from table order by 字段名称; 默认升序 select * from table order by 字段名称 desc; 降序
8.6 limit 对结果集进行截取
[code]select 字段列表 from table limit 截取的起始索引,截取的长度
8.7 联合查询(多个表联合查询)
[code]select 字段列表 from 表A join 表B on A.字段=B.字段 where 条件
9. PHP操作数据库
9.1 连接数据库基本步骤
-
连接数据库
-
准备sql语句
-
执行sql语句
-
获取执行的结果并分析
-
关闭数据库
9.2 操作数据库常用API
-
mysqli_connect(IP, 用户名,密码,数据库名,端口号)
连接数据库 -
mysqli_query($link, $sql)
执行SQL语句 -
mysqli_error($link);
返回错误描述 -
mysqli_close($link);
关闭连接 -
mysqli_fetch_assoc($res);
从结果集中取得一行作为关联数组返回 mysqli_num_rows($res);
返回结果集的行数
9.3 sql操作注意事项
-
使用PHP发送SQL语句前,可以先打印SQL语句,检查语句的正确性。
-
使用变量拼接SQL语句时,字段为字符串类型,需要在变量的两侧使用单、双引号包裹。可以将所有的字段外面都使用双引号包含。
[code] // 1. 连接数据库 // mysqli_connect(ip地址, 用户名, 密码, 数据库的名称, 端口号); // 执行结果 // 1. 连接成功, 返回一个数据库连接对象 // 2. 连接失败, 返回 false // @表示错误抑制符, 可以抑制错误的输出 $link = @ mysqli_connect('127.0.0.1', 'root', 'root', 'test02', 3306); // var_dump($link); // 如果数据库连接失败 if ( !$link ) { // 程序结束, die 方法, 结束当前程序, 输出一段语句 die("数据库连接失败"); } echo "数据库连接成功<br>"; // 2. 准备 sql 语句: 删除一条数据 $sql = "delete from stu where id = 14"; //$id = 32; //$sql = "delete from stu where id = $id"; // sql 语句外层一般是双引号, 双引号会解析变量 // 3. 让数据库执行 sql 语句, 并分析结果 // mysqli_query(数据库连接对象, 要执行的sql语句) // 执行成功返回 true, 执行失败返回 false if ( mysqli_query( $link, $sql ) ) { echo "删除成功"; } else { echo "删除失败<br>"; // mysqli_error 可以查看错误消息 echo mysqli_error($link); } // 4. 关闭数据库连接 (挂电话) mysqli_close( $link );
9.4 非查询(增删改)和查询语句(select)的区别
通过mysqli_query()函数,来执行sql语句,操作数据库
-
执行的是非查询sql语句时,mysqli_query()执行成功返回true,失败返回false
-
而执行查询的sql语句时,mysqli_query()执行成功,返回查询数据的结果集,失败返回false
查询数据逻辑如下 :
[code] // 操作步骤: // 1. 连接数据库 // 2. 准备 sql 语句 // 3. 让数据库执行 sql 语句 // 4. 分析执行结果 // 5. 关闭数据库连接 // 1. 连接 $link = @ mysqli_connect('127.0.0.1', 'root', 'root', 'test02', 3306); if ( !$link ) { // 连接失败 die('数据库连接失败'); } // 2. 准备 sql 语句 $sql = 'select * from stu where id;'; // 3. 执行 sql 语句, 分析结果 // mysqli_query // (1) 执行非查询语句, 成功 true, 失败 false // (2) 执行查询语句, 成功返回结果集, 失败 false $res = mysqli_query( $link, $sql ); if ( !$res ) { echo mysqli_error( $link ); die('数据库查询失败'); } // mysqli_fetch_assoc 查询成功, 从结果集中取数据, 以关联数组的形式返回 // 一次只取一条数据, 如果没取到, 返回 null $arr = []; while( $row = mysqli_fetch_assoc( $res ) ) { // 将值推到数组中 $arr[] = $row; } echo '<pre>'; print_r($arr); echo '</pre>';
注意:pre标签会保留空格和换行,可以进行原文格式输出,一般用于php调试输出
9.5 数据库工具函数的封装
为了提高代码的复用性,把数据增删改的操作封装成一个方法 :
[code]// 定义常量 define( 'HOST', '127.0.0.1' ); define( 'UNAME', 'root' ); define( 'PWD', 'root' ); define( 'DB', 'test02' ); define( 'PORT', 3306 ); // 非查询语句封装 // 封装一个执行非查询语句的方法, 提高代码的复用性 // 参数: $sql 要执行的 sql 语句 // 返回值: true / false function my_exec( $sql ) { // 1. 连接数据库 $link = @ mysqli_connect( HOST, UNAME, PWD, DB, PORT); if( !$link ) { echo '数据库连接失败'; return false; } // 2. 准备 sql 语句, 就是传递过来的 $sql // 3. 执行 sql 语句, 分析结果 if ( mysqli_query( $link, $sql ) ) { // 执行成功 mysqli_close( $link ); // 关闭数据库 return true; } else { // 执行失败 mysqli_close( $link ); // 关闭数据库 return false; } } // 查询语句的封装 // 参数: $sql 要执行的 sql 语句 // 返回值: // (1) 成功, 返回数据(二维数组) // (2) 失败, 返回 false function my_query( $sql ) { // 1. 建立连接 $link = @ mysqli_connect( HOST, UNAME, PWD, DB, PORT ); if ( !$link ) { echo "数据库连接失败"; return false; } // 2. 准备 sql 语句 $sql // 3. 执行 sql 语句, 分析结果 $res = mysqli_query( $link, $sql ); // 结果集 或者 false if ( !$res ) { echo "获取数据失败<br>"; echo mysqli_error($link); mysqli_close( $link ); return false; } // 得到结果集, 将结果集的所有内容取出到数组中 $arr = []; while ( $row = mysqli_fetch_assoc($res) ) { $arr[] = $row; } mysqli_close( $link ); return $arr; // 返回结果数组 }
- 【PHP基础知识】——数据库MySQL操作(上)
- PHP基础知识之连接数据库等操作
- 【PHP基础知识】——数据库MySQL操作(下)
- php PDO 方式操作数据库小结
- PHP基础10-数据库操作
- (转)Sybase ASE基础知识:利用Sybase Central简单操作Sybase ASE数据库
- PHP基础知识 - 数据库调优
- Java数据库连接——JDBC基础知识(操作数据库:增删改查)
- PHP使用数据库永久连接方式操作MySQL的是与非
- 【PHP基础知识】——文件及目录操作
- 【PHP基础知识】——PHP数组操作详解
- PHP基础教程十四之使用MySqli操作数据库
- PHP使用数据库永久连接方式操作MySQL的是与非
- php基础知识之文件操作函数以及计数器
- Java软件开发基础知识梳理之(3)------JDCB操作数据库性能优化策略
- 数据库开发基本操作-数据库基础知识
- PHP学习笔记(2)--PHP数据库操作基本知识
- PHP数据库基础操作
- 【PHP基础知识】——操作Email
- 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~