服务端 - PHP - 数据库之使用PDO进行增删改查
一、概述
1. 术语
- 数据库: 目录
- 数据表: 目录中的文件, .dbf
- 字段: 也叫’列’
- 记录: 也叫’行’,是由一个或多个字段组成
- 键: 是用来标识记录的
2. 数据类型
- 数值型: int
- 字符型: char
- 日期时间型: date, datetime
3. 增删改查操作
- 增加记录:INSERT table_name SET column1=value1, column2=value2…);
- 删除记录:DELETE FROM table_name WHERE condition;
- 更新记录:UPDATE table_name SET column1 = value1, column2 = value2… WHERE condition;
- 查询记录:SELECT column1, column2… FROM table_name WHERE condition;
二、使用PDO进行增删改查
1. 目录结构
<pre>
├─db 数据库目录
│ ├─db_curd 增删改查目录
│ │ ├─db_insert.php 插入类
│ │ ├─db_delete.php 删除类
│ │ ├─db_update.php 更新类
│ │ └─db_select.php 查询类
│ ├─db_connect.php 连接类
│ ├─db_config.php 数据库配置文件
</pre>
1. db_config.php
//数据库配置
namespace db_config;
// 数据库连接配置参数
return [
//1. 数据库类型
'type'=>$type ?? 'mysql',
//2. 数据库默认主机
'host'=>$host ?? 'localhost',
//3. 默认数据库
'dbname'=>$dbname ?? 'shopping',
//4. 默认字符编码集
'charset'=>$charset ?? 'utf8',
//5. 默认端口号
'port'=>$port ?? '3306',
//6. 默认用户名
'username'=>$username ?? 'root',
//7. 默认用户密码
'password'=>$password ?? 'root',
];
2. db_connect.php
//连接数据库
namespace db_connect;
//导入PDO类和导入异常类
use PDO;
use Exception;
//1. 加载配置参数
$cfg = require 'db_config.php';
$type = $cfg['type'];
$host = $cfg['host'];
$dbname = $cfg['dbname'];
$username = $cfg['username'];
$password = $cfg['password'];
//2. 创建数据源
$dsn = sprintf('%s:host=%s;dbname=%s', $type, $host, $dbname);
//3. PDO方式连接数据库
try {
//初始化一个PDO对象
$pdo = new PDO($dsn, $username, $password);
} catch (Exception $e) {
die($e->getMessage());
}
3. db_insert.php
//新增记录
namespace db\db_curd\db_insert;
//导入PDO类
use PDO;
//1. 连接数据库
require '../db_connect.php';
//2. 操作数据库
//2.1 新增记录
//准备一条带有参数标记的SQL语句
$sql = "INSERT `productinfo` SET `p_name`=?, `category_id`=?, `sku_id`=?, `p_stock`=?, `orig_price`=?, `mark_price`=?, `p_desc`=?, `p_img`=?, `p_time`=?";
//定义预处理语句
$stmt = $pdo->prepare($sql);
//定义数据
$data = ['黑莓手机SK5', 'DZ02', 12315156, 99, 9999.99, 6999.99, '16G运行内存,128G存储内存', 'FAJKFNALLAILA1238454', time()];
//执行预处理语句
$stmt->execute($data);
//2.2 判断是否执行成功
if ($stmt->rowCount() === 1) {
echo '新增成功,新增记录的主键是:' . $pdo->lastInsertId();
} else {
echo '新增失败';
print_r($stmt->errorInfo());
};
//3. 关闭连接
unset($pdo);
4. db_delete.php
//删除记录
namespace db\db_curd\db_delete;
//导入PDO类
use PDO;
//1. 连接数据库
require '../db_connect.php';
//2. 操作数据库
//2.1 删除记录
//准备一条带有参数标记的SQL语句
$sql = "DELETE FROM `productinfo` WHERE `sku_id`=:sku_id";
//定义预处理语句
$stmt = $pdo->prepare($sql);
//定义数据
$data = [':sku_id'=>12315153];
//执行预处理语句
$stmt->execute($data);
//2.2 判断是否执行成功
if ($stmt->rowCount() >= 1) {
echo '删除成功,删除记录数:' . $stmt->rowCount();
} else {
echo '删除失败';
print_r($stmt->errorInfo());
};
//3. 关闭连接
unset($pdo);
5. db_update.php
//更新记录
namespace db\db_curd\db_update;
//导入PDO类
use PDO;
//1. 连接数据库
require '../db_connect.php';
//2. 操作数据库
//2.1 更新记录
//准备一条带有参数标记的SQL语句
$sql = "UPDATE `productinfo` SET `p_name`=? WHERE `sku_id`=?";
//定义预处理语句
$stmt = $pdo->prepare($sql);
//定义数据
$data = ['黑莓手机SK6', 12315154];
//执行预处理语句
$stmt->execute($data);
//2.2 判断是否执行成功
if ($stmt->rowCount() >= 1) {
echo '更新成功,更新记录数:' . $stmt->rowCount();
} else {
echo '删除失败';
print_r($stmt->errorInfo());
};
//3. 关闭连接
unset($pdo);
6. db_select.php
6.1 单条查询
//单条查询记录
namespace db\db_curd\db_select;
//导入PDO类
use PDO;
//1. 连接数据库
require '../db_connect.php';
//2. 操作数据库
//2.1 查询记录
//准备一条带有参数标记的SQL语句
$sql = "SELECT `id`, `p_name` FROM `productinfo` WHERE `p_stock`<? and `mark_price`<?";
//定义预处理语句
$stmt = $pdo->prepare($sql);
//定义数据
$data = [10, 9999.99];
//执行预处理语句
$stmt->execute($data);
//2.2 判断是单条查询还是多条查询及返回查询结果
switch ($stmt->rowCount()) {
case ($stmt->rowCount() === 1):
$staff = $stmt->fetch(PDO::FETCH_ASSOC);
printf('<pre>%s</pre>', print_r($staff, true));
break;
case ($stmt->rowCount() > 1):
$staffs = $stmt->fetchAll(PDO::FETCH_ASSOC);
printf('<pre>%s</pre>', print_r($staffs, true));
break;
default:
echo '查询失败';
print_r($stmt->errorInfo());
}
//3. 关闭连接
unset($pdo);
6.2 多条查询
//单条查询记录
namespace db\db_curd\db_select;
//导入PDO类
use PDO;
//1. 连接数据库
require '../db_connect.php';
//2. 操作数据库
//2.1 查询记录
//准备一条带有参数标记的SQL语句
$sql = "SELECT `id`, `p_name` FROM `productinfo` WHERE `p_stock`<? and `mark_price`<?";
//定义预处理语句
$stmt = $pdo->prepare($sql);
//定义数据
$data = [10, 9999.99];
//执行预处理语句
$stmt->execute($data);
//2.2 判断是单条查询还是多条查询及返回查询结果
switch ($stmt->rowCount()) {
case ($stmt->rowCount() === 1):
$staff = $stmt->fetch(PDO::FETCH_ASSOC);
printf('<pre>%s</pre>', print_r($staff, true));
break;
case ($stmt->rowCount() > 1):
$staffs = $stmt->fetchAll(PDO::FETCH_ASSOC);
printf('<pre>%s</pre>', print_r($staffs, true));
break;
default:
echo '查询失败';
print_r($stmt->errorInfo());
}
//3. 关闭连接
unset($pdo);
三、课程总结
- 今天学习了 PHP 的PDO MySQL操作,通过上课认真听讲和认真完成老师布置的作业,使得我对 PDO的理解和运用更加深入和熟悉。最主要的知识点是明白和掌握了SQL增删改查和PDO MySQL的语法以及它们的基本用法。