数据库
1. 发展
- 以文件/文档的方式进行手工管理
- 数据库的方式管理
- 关系型数据库:MySQL
- 关系: 表格
- 免费, 大厂产品, 社区活跃
2. 管理工具
- phpmyadmin:web
- mysql workbench: MySQL 工作台
- Navicat: 好用收费
- DBeaver: 免费客户端工具
- Adminer.php
3. 术语
- 数据库: 目录
- 数据表: 目录中的文件, .dbf
- 字段: 也叫’列’
- 记录: 也叫’行’,是由一个或多个字段组成
- 键: 是用来标识记录的
4. 数据类型
- 数值型: int
- 字符型: char
- 日期时间型: date, datetime
5. 常用指令
- 操作方式: 增删改查: CURD
- 数据是否变化: 分为读与写二种
读: 查询 select
写: 增加 insert, 更新 update, 删除 delete
连接数据库
config/database.php
<?php
namespace pdo_edu;
// 数据库连接配置参数
return [
// 数据库的类型
'type' => $type ?? 'mysql',
// 数据库默认主机
'host' => $host?? 'localhost',
// 默认数据库
'dbname'=> $dbname ?? 'phpedu',
// 默认字符编码集
'charset'=> $charset ?? 'utf8',
// 默认端口号
'port'=> $port ?? '3306',
// 默认的用户名
'username'=> $username ?? 'root',
// 默认的用户密码
'password'=> $password ?? 'root',
];
connect.php
<?php
// 连接数据库
namespace pdo_edu;
use Exception;
use PDO;
// 加载配置参数
$config = require 'config/database.php';
// PDO: PHP Data Object, php数据对象
// pdo可以让php对所有类型的数据库, 提供了一个统一的,轻量级的访问接口
// PDO连接数据库三要素, 三个重要参数,
// 数据源: DSN
// 用户名: username
// 用户密码: password
// DSN: 数据库类型:host=数据库的主机地址;dbname=默认的数据库名称;chart=... ;port= ...
// $dsn = 'mysql:host=localhost;dbname=phpedu;charset=utf8;port=3306';
$type = $config['type'];
$host = $config['host'];
$dbname = $config['dbname'];
$username = $config['username'];
$password = $config['password'];
// 创建DSN
$dsn = sprintf('%s:host=%s;dbname=%s', $type,$host,$dbname);
try {
// 连接数据库
$pdo = new PDO($dsn, $username, $password);
// var_dump($pdo);
} catch (Exception $e) {
die($e->getMessage());
}
增删改查操作示例
1、select1.php,查询条件:age>40
数据表内容:
查询结果显示:
<?php
// 数据表查询: 单条查询
namespace pdo_edu;
use PDO;
// 1. 连接数据库
require 'connect.php';
// 2. 操作数据表(CURD)
// $sql = 'SELECT 字段列表 FROM 数据表名称 WHERE 查询条件 '
$sql = 'SELECT `id`,`name` FROM `staffs` WHERE `age` > 40';
// 预处理对象$stmt:为了防止 SQL注入
$stmt = $pdo->prepare($sql);
// 预处理对象$stmt , 就是SQL语句对象
// 使用预处理对象调用 execute()执行这条sql语句
$stmt->execute();
// 使用:debugDumpParams()调试/查看
// var_dump($stmt->debugDumpParams());
// 获取表中一条记录
// $staff = $stmt->fetch(PDO::FETCH_ASSOC);
// printf('<pre>%s</pre>',print_r($staff,true));
// $staff = $stmt->fetch(PDO::FETCH_ASSOC);
// printf('<pre>%s</pre>',print_r($staff,true));
// $staff = $stmt->fetch(PDO::FETCH_ASSOC);
// printf('<pre>%s</pre>',print_r($staff,true));
// 如果再也没有满足条件的记录, 会返回false
while ($staff = $stmt->fetch(PDO::FETCH_ASSOC)) {
printf('<pre>%s</pre>',print_r($staff,true));
}
// 3. 关闭连接[可选]
// $pdo = null;
unset($pdo);
select2.php
<?php
// 数据表查询: 多条查询
namespace pdo_edu;
use PDO;
// 1. 连接数据库
require 'connect.php';
// 2. 操作数据表(CURD)
// $sql = 'SELECT 字段列表 FROM 数据表名称 WHERE 查询条件 '
// 匿名占位符: ?
// $sql = 'SELECT * FROM `staffs` WHERE `age` > ?';
// 命名占位符: 给一个有意义 的字符串, 必须用冒号开始
$sql = 'SELECT * FROM `staffs` WHERE `age` > :age';
// 预处理对象$stmt:为了防止 SQL注入
$stmt = $pdo->prepare($sql);
// 预处理对象$stmt , 就是SQL语句对象
// 使用预处理对象调用 execute()执行这条sql语句
// 对应匿名占位符使用是索引数组
// $stmt->execute([50]);
// 对应命名占位符使用是关联数组
$stmt->execute(['age'=>60]);
$staffs = $stmt->fetchAll(PDO::FETCH_ASSOC);
// print_r($staffs);
foreach ($staffs as $staff) {
$date = date('Y年m月d日', $staff['hiredate']);
printf('id=%s:姓名=%s---职位=%s---入职时间=%s<br>', $staff['id'], $staff['name'], $staff['position'], $date);
}
// 3. 关闭连接[可选]
// $pdo = null;
unset($pdo);
// fetch()
// fetchAll()
2、insert.php
<?php
// 数据表新增记录
namespace pdo_edu;
use PDO;
// 1. 连接数据库
require 'connect.php';
// 2. 操作数据表(CURD)
// $sql = 'INSERT 表名 SET name=?, age=?,.... ';
$sql = "INSERT `staffs` SET `name`= ? , `age`=?, `sex`=?, `position`=?, `mobile`=?, `hiredate`=?";
$stmt = $pdo->prepare($sql);
$data = ['朱老师', 66, 1, '讲师', '18977665544', 1579244075];
$stmt->execute($data);
// 判断是否执行成功
// $stmt->rowCount(): 返回写操作产生的受影响的记录数量
if ($stmt->rowCount() === 1) {
echo '新增成功, 新增记录的主键是: ' . $pdo->lastInsertId();
} else {
echo '新增失败';
print_r($stmt->errorInfo());
}
// 3. 关闭连接[可选]
unset($pdo);
3、update.php
<?php
// 数据表更新记录
namespace pdo_edu;
use PDO;
// 1. 连接数据库
require 'connect.php';
// 2. 操作数据表(CURD)
// $sql = "UPDATE 表名 SET 字段=新值 WHERE 更新条件"
$sql = "UPDATE `staffs` SET `name` = ? WHERE `id`=?";
$stmt = $pdo->prepare($sql);
$stmt->execute(['王老师', 11]);
// 判断是否执行成功
// $stmt->rowCount(): 返回写操作产生的受影响的记录数量
if ($stmt->rowCount() === 1) {
echo '更新成功';
} else {
echo '没有记录被更新';
print_r($stmt->errorInfo());
}
// 3. 关闭连接[可选]
unset($pdo);
4、delete.php
<?php
// 数据表删除记录
namespace pdo_edu;
use PDO;
// 1. 连接数据库
require 'connect.php';
// 2. 操作数据表(CURD)
// $sql = "DELETE FROM 表名 WHERE 删除条件"
$sql = "DELETE FROM `staffs` WHERE `id`=:id";
$stmt = $pdo->prepare($sql);
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
$stmt->execute(['id'=>$_GET['id']]);
// 判断是否执行成功
// $stmt->rowCount(): 返回写操作产生的受影响的记录数量
if ($stmt->rowCount() === 1) {
echo '删除成功';
}
// 3. 关闭连接[可选]
unset($pdo);
课程学习小结
本次课程老师讲解非常细致,我也认真回看了视频,并实操了每一段代码予以加深理解,对原本感觉有神秘面纱的数据库内容进行了第一次成功实操,使用了phpstudy自带的MySQL5.7.26数据库及navicat管理工具,当第一次修改完成相关设置参数并实现查询、新增、更新、删除等功能的时候,内心还是有点小窃喜的,满足学习带来的小乐趣,后续将花更多时间深入学习。