您的位置:首页 > 编程语言 > PHP开发

PHP基础知识3——数据库操作方式

2019-08-08 16:33 1156 查看

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

英文手册地址:https://dev.mysql.com/doc/refman/5.5/en/

中文参考论坛: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(时分秒)。年月日时分秒。

字段约束

字段约束: 字段数据的属性规则(特征)

  1. not null 不为空

    可以限制字段值不能为空

  2. default 默认值,

    可以设置字段的默认值,在没有录入时自动使用默认值填充。

  3. primary key 主键 :唯一标识,不能重复,不能为空

    设置字段为主键,主键字段的值不能重复,不能为空。而且一个数据表中只能设置一个字段为主键,作为每行记录的唯一身份信息(索引)。stu_id int primary key

  4. auto_increment 自动增长

    设置字段为自动增长,默认从1开始自动分配编号。自增长字段必须为一个key(索引,数据结构,便于快速查找数据,相当于书的目录),一般与primary key结合使用。

    类型必须为整型。

  5. 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 连接数据库基本步骤

  1. 连接数据库

  2. 准备sql语句

  3. 执行sql语句

  4. 获取执行的结果并分析

  5. 关闭数据库

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; // 返回结果数组
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: