Blogger Information
Blog 47
fans 1
comment 0
visits 53030
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
MYSQL - 认知及基础的增删改查实例
晴天
Original
825 people have browsed it

数据库

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就足够了,学了也会忘浪费时间,不如将时间用到有意义的事情上面,不知道我这个想法对不对

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:理解了数据库操作的流程比会用哪种方式实现更重要, pdo是目前主流方式, 如果遇到mysqli的项目, 相信你也会很快上手
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post