博客列表 >服务端 - PHP - 数据库之使用PDO进行增删改查

服务端 - PHP - 数据库之使用PDO进行增删改查

郴
原创
2020年05月13日 10:09:56683浏览

服务端 - 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. 目录结构

  1. <pre>
  2. ├─db 数据库目录
  3. │ ├─db_curd 增删改查目录
  4. │ │ ├─db_insert.php 插入类
  5. │ │ ├─db_delete.php 删除类
  6. │ │ ├─db_update.php 更新类
  7. │ │ └─db_select.php 查询类
  8. │ ├─db_connect.php 连接类
  9. │ ├─db_config.php 数据库配置文件
  10. </pre>

1. db_config.php

  1. //数据库配置
  2. namespace db_config;
  3. // 数据库连接配置参数
  4. return [
  5. //1. 数据库类型
  6. 'type'=>$type ?? 'mysql',
  7. //2. 数据库默认主机
  8. 'host'=>$host ?? 'localhost',
  9. //3. 默认数据库
  10. 'dbname'=>$dbname ?? 'shopping',
  11. //4. 默认字符编码集
  12. 'charset'=>$charset ?? 'utf8',
  13. //5. 默认端口号
  14. 'port'=>$port ?? '3306',
  15. //6. 默认用户名
  16. 'username'=>$username ?? 'root',
  17. //7. 默认用户密码
  18. 'password'=>$password ?? 'root',
  19. ];

2. db_connect.php

  1. //连接数据库
  2. namespace db_connect;
  3. //导入PDO类和导入异常类
  4. use PDO;
  5. use Exception;
  6. //1. 加载配置参数
  7. $cfg = require 'db_config.php';
  8. $type = $cfg['type'];
  9. $host = $cfg['host'];
  10. $dbname = $cfg['dbname'];
  11. $username = $cfg['username'];
  12. $password = $cfg['password'];
  13. //2. 创建数据源
  14. $dsn = sprintf('%s:host=%s;dbname=%s', $type, $host, $dbname);
  15. //3. PDO方式连接数据库
  16. try {
  17. //初始化一个PDO对象
  18. $pdo = new PDO($dsn, $username, $password);
  19. } catch (Exception $e) {
  20. die($e->getMessage());
  21. }

3. db_insert.php

  1. //新增记录
  2. namespace db\db_curd\db_insert;
  3. //导入PDO类
  4. use PDO;
  5. //1. 连接数据库
  6. require '../db_connect.php';
  7. //2. 操作数据库
  8. //2.1 新增记录
  9. //准备一条带有参数标记的SQL语句
  10. $sql = "INSERT `productinfo` SET `p_name`=?, `category_id`=?, `sku_id`=?, `p_stock`=?, `orig_price`=?, `mark_price`=?, `p_desc`=?, `p_img`=?, `p_time`=?";
  11. //定义预处理语句
  12. $stmt = $pdo->prepare($sql);
  13. //定义数据
  14. $data = ['黑莓手机SK5', 'DZ02', 12315156, 99, 9999.99, 6999.99, '16G运行内存,128G存储内存', 'FAJKFNALLAILA1238454', time()];
  15. //执行预处理语句
  16. $stmt->execute($data);
  17. //2.2 判断是否执行成功
  18. if ($stmt->rowCount() === 1) {
  19. echo '新增成功,新增记录的主键是:' . $pdo->lastInsertId();
  20. } else {
  21. echo '新增失败';
  22. print_r($stmt->errorInfo());
  23. };
  24. //3. 关闭连接
  25. unset($pdo);


4. db_delete.php

  1. //删除记录
  2. namespace db\db_curd\db_delete;
  3. //导入PDO类
  4. use PDO;
  5. //1. 连接数据库
  6. require '../db_connect.php';
  7. //2. 操作数据库
  8. //2.1 删除记录
  9. //准备一条带有参数标记的SQL语句
  10. $sql = "DELETE FROM `productinfo` WHERE `sku_id`=:sku_id";
  11. //定义预处理语句
  12. $stmt = $pdo->prepare($sql);
  13. //定义数据
  14. $data = [':sku_id'=>12315153];
  15. //执行预处理语句
  16. $stmt->execute($data);
  17. //2.2 判断是否执行成功
  18. if ($stmt->rowCount() >= 1) {
  19. echo '删除成功,删除记录数:' . $stmt->rowCount();
  20. } else {
  21. echo '删除失败';
  22. print_r($stmt->errorInfo());
  23. };
  24. //3. 关闭连接
  25. unset($pdo);


5. db_update.php

  1. //更新记录
  2. namespace db\db_curd\db_update;
  3. //导入PDO类
  4. use PDO;
  5. //1. 连接数据库
  6. require '../db_connect.php';
  7. //2. 操作数据库
  8. //2.1 更新记录
  9. //准备一条带有参数标记的SQL语句
  10. $sql = "UPDATE `productinfo` SET `p_name`=? WHERE `sku_id`=?";
  11. //定义预处理语句
  12. $stmt = $pdo->prepare($sql);
  13. //定义数据
  14. $data = ['黑莓手机SK6', 12315154];
  15. //执行预处理语句
  16. $stmt->execute($data);
  17. //2.2 判断是否执行成功
  18. if ($stmt->rowCount() >= 1) {
  19. echo '更新成功,更新记录数:' . $stmt->rowCount();
  20. } else {
  21. echo '删除失败';
  22. print_r($stmt->errorInfo());
  23. };
  24. //3. 关闭连接
  25. unset($pdo);


6. db_select.php

6.1 单条查询

  1. //单条查询记录
  2. namespace db\db_curd\db_select;
  3. //导入PDO类
  4. use PDO;
  5. //1. 连接数据库
  6. require '../db_connect.php';
  7. //2. 操作数据库
  8. //2.1 查询记录
  9. //准备一条带有参数标记的SQL语句
  10. $sql = "SELECT `id`, `p_name` FROM `productinfo` WHERE `p_stock`<? and `mark_price`<?";
  11. //定义预处理语句
  12. $stmt = $pdo->prepare($sql);
  13. //定义数据
  14. $data = [10, 9999.99];
  15. //执行预处理语句
  16. $stmt->execute($data);
  17. //2.2 判断是单条查询还是多条查询及返回查询结果
  18. switch ($stmt->rowCount()) {
  19. case ($stmt->rowCount() === 1):
  20. $staff = $stmt->fetch(PDO::FETCH_ASSOC);
  21. printf('<pre>%s</pre>', print_r($staff, true));
  22. break;
  23. case ($stmt->rowCount() > 1):
  24. $staffs = $stmt->fetchAll(PDO::FETCH_ASSOC);
  25. printf('<pre>%s</pre>', print_r($staffs, true));
  26. break;
  27. default:
  28. echo '查询失败';
  29. print_r($stmt->errorInfo());
  30. }
  31. //3. 关闭连接
  32. unset($pdo);


6.2 多条查询

  1. //单条查询记录
  2. namespace db\db_curd\db_select;
  3. //导入PDO类
  4. use PDO;
  5. //1. 连接数据库
  6. require '../db_connect.php';
  7. //2. 操作数据库
  8. //2.1 查询记录
  9. //准备一条带有参数标记的SQL语句
  10. $sql = "SELECT `id`, `p_name` FROM `productinfo` WHERE `p_stock`<? and `mark_price`<?";
  11. //定义预处理语句
  12. $stmt = $pdo->prepare($sql);
  13. //定义数据
  14. $data = [10, 9999.99];
  15. //执行预处理语句
  16. $stmt->execute($data);
  17. //2.2 判断是单条查询还是多条查询及返回查询结果
  18. switch ($stmt->rowCount()) {
  19. case ($stmt->rowCount() === 1):
  20. $staff = $stmt->fetch(PDO::FETCH_ASSOC);
  21. printf('<pre>%s</pre>', print_r($staff, true));
  22. break;
  23. case ($stmt->rowCount() > 1):
  24. $staffs = $stmt->fetchAll(PDO::FETCH_ASSOC);
  25. printf('<pre>%s</pre>', print_r($staffs, true));
  26. break;
  27. default:
  28. echo '查询失败';
  29. print_r($stmt->errorInfo());
  30. }
  31. //3. 关闭连接
  32. unset($pdo);


三、课程总结

  • 今天学习了 PHP 的PDO MySQL操作,通过上课认真听讲和认真完成老师布置的作业,使得我对 PDO的理解和运用更加深入和熟悉。最主要的知识点是明白和掌握了SQL增删改查和PDO MySQL的语法以及它们的基本用法。
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议