博客列表 >MYSQL - 认知及基础的增删改查实例

MYSQL - 认知及基础的增删改查实例

晴天
晴天原创
2020年05月16日 17:20:17822浏览

数据库

1. 发展

  • 以文件/文档的方式进行手工管理
  • 数据库的方式管理
  • 关系型数据库:MySQL
  • 关系: 表格
  • 免费, 大厂产品, 社区活跃

2. 管理工具

  • phpmyadmin:web
  • mysql workbench: MySQL 工作台
  • Navicat: 好用收费
  • DBeaver: 免费客户端工具
  • Adminer.php 推荐

3. 术语

  • 数据库: 目录
  • 数据表: 目录中的文件, .dbf
  • 字段: 也叫’列’
  • 记录: 也叫’行’,是由一个或多个字段组成
  • 键: 是用来标识记录的

4. 数据类型

  • 数值型: int
  • 字符型: char
  • 日期时间型: date, datetime

5. 常用指令

  1. 操作方式: 增删改查: CURD
  2. 数据是否变化: 分为读与写二种
    读: 查询 select
    写: 增加 insert, 更新 update, 删除 delete

6. 演示

6.1 创建数据库链接配置参数

  • 放到 config 目录下的 database.php 中

config/database.php

  1. <?php
  2. //声明命名空间
  3. namespace pdo_edu;
  4. //将连接数据库参数以数组方式进行返回
  5. //连接数据库配置参数
  6. return[
  7. // 数据库类型
  8. 'type' => $type ?? 'mysql',
  9. // 数据库地址
  10. 'host' => $host ?? 'localhost',
  11. // 数据库名
  12. 'dbname' => $dbname ?? 'php11.edu',
  13. // 数据库编码集
  14. 'charset' => $charset ?? 'utf8',
  15. // 数据库端口号
  16. 'port' => $port ?? '3306',
  17. // 数据库用户名
  18. 'username' => $username ?? 'root',
  19. // 数据库密码
  20. 'password' => $password ?? 'root',
  21. ];

6.2 连接数据库

  • 放到 connect.php 文件中

connect.php

  1. <?php
  2. //链接数据库
  3. //声明命名空间
  4. namespace pdo_edu;
  5. //使用全局系统对象
  6. use PDO;
  7. use Exception;
  8. //加载配置参数
  9. $config = require 'config/database.php';
  10. //数组键值对转为名值对
  11. /**
  12. * @var string $type
  13. * @var string $host
  14. * @var string $dbname
  15. * @var string $charset
  16. * @var string $port
  17. * @var string $username
  18. * @var string $password
  19. * */
  20. extract($config);
  21. //创建dsn
  22. $dsn = sprintf('%s:host=%s;dbname=%s',$type,$host,$dbname);
  23. //修改默认用户名和密码
  24. $username = 'php11.edu';
  25. $password = 'php11.edu';
  26. //链接数据库
  27. try {
  28. $pdo = new PDO($dsn,$username,$password);
  29. // 测试有没有链接成功
  30. // var_dump($pdo); // 输出 object(PDO)#1 (0) { } 链接成功
  31. }catch (Exception $e){
  32. die($e->getMessage());
  33. }

6.3 进行增删改查

6.3.1 增 (向数据库中添加一组数据)

insert.php

  1. <?php
  2. //创建命名空间
  3. namespace pdo_edu;
  4. //加载连接数据库文件
  5. require 'connect.php';
  6. //操作数据表 增 INSERT
  7. //sql命令格式 INSERT 表名 SET 数据。。。
  8. //创建sql语句
  9. //通常这些数据以数组形式输入 如果是索引数组使用
  10. //$sql = "INSERT `staffs` SET `name` = ? ,`age` = ? , `sex` = ? , `position` = ? , `mobile` = ? , `hiredate` = ?";
  11. //如果是关联数组 使用
  12. $sql = "INSERT `staffs` SET `name` = :name ,`age` = :age , `sex` = :sex , `position` = :position , `mobile` = :mobile , `hiredate` = :hiredate";
  13. //通常向数据库添加数据 获取$_POST数据 以POST数据为例
  14. //当前没有POST数据 手动创建POST数据
  15. $_POST = ['name'=>'大西瓜','age'=>'25','sex'=>'1','position'=>'夏季消暑扛把子','mobile'=>'18899998888','hiredate'=>''];
  16. //hiredate 时间戳取当前时间戳
  17. $_POST['hiredate'] = time();
  18. //开始写入
  19. $stmt = $pdo->prepare($sql);
  20. $stmt->execute($_POST);
  21. //判断是否执行成功
  22. //$stmt->rowCount() 返回该操作受影响的记录数量
  23. //$pdo->lastInsertId(); 返回写入操作最后一个id
  24. if ($stmt->rowCount() === 1){
  25. echo '新增成功id = '.$pdo->lastInsertId();
  26. }else{
  27. echo '写入失败';
  28. }
  29. //输出 新增成功id = 412
  • 数据库显示正常

6.3.2 删 (删除数据库中的某条数据)

delete.php

  1. <?php
  2. //删除数据库中的某条数据
  3. //声明命名空间
  4. namespace pdo_edu;
  5. //加载数据库
  6. require 'connect.php';
  7. //操作数据表 删 DELETE
  8. $sql = "DELETE FROM `staffs` WHERE `id`=:id";
  9. //开始执行
  10. $stmt = $pdo->prepare($sql);
  11. //删除通常使用get方式
  12. //所以要过滤一下,防止sql注入攻击
  13. //检测 get方式提交表单中的id是不是数字
  14. if (!filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT)){
  15. $_GET['id'] = '非法数据';
  16. }
  17. ////断掉进程测试一下判断是否生效
  18. //echo $_GET['id']; //delete.php?id=s1 输出 非法数据 delete.php?id=1 输出 1
  19. //die();
  20. $stmt->execute($_GET);
  21. //判断是否执行成功
  22. if ($stmt->rowCount()=== 1) {
  23. echo '删除成功';
  24. }else{
  25. echo '删除失败';
  26. }
  27. //执行 /delete.php?id=412 输出 删除成功
  • 看一下数据库 最后一条 411 已经没有 412 的数据了

6.3.3 改 (修改数据库中的某条数据)

update.php

  1. <?php
  2. namespace pdo_edu;
  3. require 'connect.php';
  4. //把 id = 411 的 name position 改掉
  5. $sql = "UPDATE `staffs` SET `name` = ? , `position` = ? WHERE `id` = ?";
  6. $stmt = $pdo->prepare($sql);
  7. $stmt->execute(['大冬瓜','冬季驱寒扛把子',411]);
  8. //判断是否执行成功
  9. if ($stmt->rowCount() === 1){
  10. echo '修改成功';
  11. }else{
  12. echo '没有记录被更新';
  13. // 打印返回数组
  14. print_r($stmt->errorUInfo());
  15. }
  16. //访问输出 修改成功
  • 去数据库看一下,已经成功被修改

6.3.4 查 查询数据库中的数据

  • 单条查询

    select1.php

  1. <?php
  2. namespace pdo_edu;
  3. //下面查询语句中要使用PDO对象 use一下
  4. use PDO;
  5. require 'connect.php';
  6. //查询数据库中年龄大于40的员工 *表示返回所有数据 如果只想要id name 就输入 `id`,`name`
  7. $sql = 'SELECT * FROM `staffs` WHERE `age`>40';
  8. $stmt = $pdo->prepare($sql);
  9. $stmt->execute();
  10. printf('<pre>%s</pre>',print_r($stmt->fetch(PDO::FETCH_ASSOC),true));
  11. //输出 Array
  12. //(
  13. // [id] => 2
  14. // [name] => 祁同伟
  15. // [age] => 46
  16. // [sex] => 1
  17. // [position] => 公安厅长
  18. // [mobile] => 13023456110
  19. // [hiredate] => 1420041600
  20. //)
  21. //如果你要获取多条
  22. while ($staff = $stmt->fetch(PDO::FETCH_ASSOC)){
  23. printf('<pre>%s</pre>',print_r($staff ,true));
  24. }
  25. //输出 这里这复制了部分过来 他会一直输出直到没有符合条件为止 Array
  26. //(
  27. // [id] => 3
  28. // [name] => 高育良
  29. // [age] => 57
  30. // [sex] => 1
  31. // [position] => 政法书记
  32. // [mobile] => 15678789933
  33. // [hiredate] => 981734400
  34. //)
  35. //Array
  36. //(
  37. // [id] => 4
  38. // [name] => 李达康
  39. // [age] => 51
  40. // [sex] => 1
  41. // [position] => 市委书记
  42. // [mobile] => 13088856110
  43. // [hiredate] => 1336838400
  44. //)
  45. //Array
  46. //(
  47. // [id] => 5
  48. // [name] => 沙瑞金
  49. // [age] => 56
  50. // [sex] => 1
  51. // [position] => 省委书记
  52. // [mobile] => 18956490987
  53. // [hiredate] => 1179158400
  54. //)
  • 多条查询

    select2.php

  1. <?php
  2. //其实就是把 fetch 改成 fetchAll
  3. //fetch 返回一维数组
  4. //fetchAll 返回二维数组
  5. namespace pdo_edu;
  6. //下面查询语句中要使用PDO对象 use一下
  7. use PDO;
  8. require 'connect.php';
  9. //查询数据库中年龄大于40的员工 *表示返回所有数据 如果只想要id name 就输入 `id`,`name`
  10. $sql = 'SELECT * FROM `staffs` WHERE `age`>40';
  11. $stmt = $pdo->prepare($sql);
  12. $stmt->execute();
  13. //printf('<pre>%s</pre>', print_r($stmt->fetchAll(PDO::FETCH_ASSOC), true));
  14. //如果你要显示它 使用 foreach
  15. $staffs = $stmt->fetchAll(PDO::FETCH_ASSOC);
  16. foreach ($staffs as $staff){
  17. // 时间戳改为时间
  18. $date = date('Y年m月d日',$staff['hiredate']);
  19. printf('id=%s:姓名=%s---职位=%s---入职时间=%s<br>', $staff['id'], $staff['name'], $staff['position'], $date);
  20. }
  21. //输出 id=2:姓名=祁同伟---职位=公安厅长---入职时间=2014年12月31日
  22. //id=3:姓名=高育良---职位=政法书记---入职时间=2001年02月09日
  23. //id=4:姓名=李达康---职位=市委书记---入职时间=2012年05月12日
  24. //id=5:姓名=沙瑞金---职位=省委书记---入职时间=2007年05月14日
  25. //id=6:姓名=赵东来---职位=公安局长---入职时间=2013年08月07日
  26. //id=8:姓名=陈清泉---职位=外语学霸---入职时间=2011年11月10日
  27. //id=10:姓名=陆亦可---职位=调查处长---入职时间=2008年08月09日
  28. //id=12:姓名=祁同伟---职位=公安厅长---入职时间=2014年12月31日
  29. //id=13:姓名=高育良---职位=政法书记---入职时间=2001年02月09日

7. 总结

前几天有事耽搁了,不过感觉现在写这个作业跟课后第二天写作业完全不一样,最近几天一直在使用PDO ,以前课后就写是记录操作方法,今天写这个博客就像是在复习,所有语句都明白是什么意思~ 算不上手到擒来也差不多 mysqli暂时不想学了,因为目前用不到,而且有PDO就足够了,学了也会忘浪费时间,不如将时间用到有意义的事情上面,不知道我这个想法对不对

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议