博主信息
博文 30
粉丝 0
评论 0
访问量 19305
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP数据库的CURD操作
天宁
原创
774人浏览过

数据库操作流程

连接数据库
  1. <?php
  2. namespace pdo_edu;
  3. // use PDO as PDO; //如果别名相同可以不写as后面的
  4. use PDO;
  5. $dbConfig = require 'database.php';
  6. extract($dbConfig);
  7. // 1. dsn
  8. $tpl = '%s:host=%s;dbname=%s;port=%s;charset=%s';
  9. $args = [$type, $host, $dbname, $port, $charset];
  10. $dsn = sprintf($tpl, ...$args);
  11. // echo $dsn;
  12. // 2. 创建数据对象
  13. $db = new PDO($dsn, $username, $password);
  14. // 设置结果集的默认获取模式:只要关联部分
  15. $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
增删改查:CURD
关闭连接(可选)
  1. //关闭连接可以不写,因为长时间不操作数据库会自动断开连接
  2. $db = null;
  3. unset($db);

数据库常用操作

  • 为什么要PDO预处理

    • 防止SQL注入攻击
    • 数据延迟绑定(编程时只写SQL语句模板,执行SQL时再给占位符绑定真实数据)
  • 预处理过程

    • 创建SQL语句模板对象:数据使用占位符表示
    • 执行SQL语句,根据操作类型(写/读),读返回结果集/数组,写返回受影响的记录数量
  • SQL语句推荐规范

    • 关键字全大写
    • 表名,字段名使用反引号做为定界符
读操作:select(查询)
  1. 单条查询 fetch()

    1. 语法:SELECT 字段列表 FROM 表名 WHERE 查询条件
    2. 创建SQL语句模板对象

      1. $sql = 'SELECT `id`,`name` FROM `staff` WHERE `id` > :id';
      2. $stmt = $db->prepare($sql);
    3. 执行SQL语句

      1. $stmt->execute(['id' => 10]);
      2. //单条查询,拿到查询结果
      3. $staff = $stmt->fetch(PDO::FETCH_ASSOC);
      4. printf('<pre>%s</pre>', print_r($staff, true));
      5. $staff = $stmt->fetch(PDO::FETCH_ASSOC);
      6. printf('<pre>%s</pre>', print_r($staff, true));
      7. //一条一条获取太麻烦了,用while来全部获取
      8. while ($staff = $stmt->fetch()) {
      9. printf('<pre>%s</pre>', print_r($staff, true));
      10. }
  2. 多条查询 fetchAll()

    1. 语法:和上面的单条查询是一样的,只不过获取查询数据时候有区别
    2. 创建SQL语句模板对象,和上面也是一样的
    3. 执行SQL语句

      1. $stmt->execute(['id' => 10]);
      2. // fetchAll: 返回全部满足条件的记录集合,二维数组
      3. $staffs = $stmt->fetchAll();
      4. // print_r($staffs);
      5. foreach ($staffs as $staff) {
      6. printf('<pre>%s</pre>', print_r($staff, true));
      7. }
写操作
  1. insert(插入/增加)

    1. 语法:INSERT 表名 SET 字段1=值1, 字段2=值2, ....
    2. 创建SQL语句模板对象

      PDO::prepare() — 准备要执行的语句,并返回语句对象

      1. $sql = 'INSERT `staff` SET `name` = ?, `sex` = ?, `email` = ?';
      2. $stmt = $db->prepare($sql);
    3. 执行SQL语句(可以执行多条)

      PDOStatement::execute() — 执行一条预处理语句

      1. $stmt->execute(['小龙女', 1, 'xiaolongnv@php.cn']);
      2. $stmt->execute(['洪七公', 0, 'hongqigong@php.cn']);
      3. $stmt->execute(['黄蓉', 0, 'huangrong@php.cn']);
    4. 完整代码

      1. // 1. 连接数据库
      2. require __DIR__ . '/config/connect.php';
      3. // 1. 创建SQL语句模板对象
      4. $sql = 'INSERT `staff` SET `name` = ?, `sex` = ?, `email` = ?';
      5. $stmt = $db->prepare($sql);
      6. // 2. 执行SQL语句
      7. $stmt->execute(['小龙女', 0, 'xiaolongnv@php.cn']);
      8. $stmt->execute(['洪七公', 1, 'hongqigong@php.cn']);
      9. $stmt->execute(['黄蓉', 0, 'huangrong@php.cn']);
      10. // 成功
      11. // $stmt->rowCount(): 返回受影响的记录数量
      12. if ($stmt->rowCount() > 0) {
      13. echo '新增成功, 新增记录的最新一条主键ID = ' . $db->lastInsertId();
      14. } else {
      15. echo '新增失败';
      16. print_r($stmt->errorInfo());
      17. }
  2. update(更新),一定要有条件

    1. 语法:UPDATE 表名 SET 字段1=值1 ... WHERE 更新条件
    2. 创建SQL语句模板对象

      1. $sql = 'UPDATE `staff` SET `name` = ? WHERE `id` = ?';
      2. $stmt = $db->prepare($sql);
    3. 执行SQL语句$stmt->execute(['老顽童', 6]);
    4. 完整代码

      1. // 1. 连接数据库
      2. require __DIR__ . '/config/connect.php';
      3. // 2. CURD: UPDATE 更新
      4. // UPDATE 表名 SET 字段1=值1 ... WHERE 更新条件
      5. $sql = 'UPDATE `staff` SET `name` = ? WHERE `id` = ?';
      6. $stmt = $db->prepare($sql);
      7. $stmt->execute(['老顽童', 6]);
      8. if ($stmt->rowCount() > 0) {
      9. echo '更新成功';
      10. } else {
      11. echo '更新失败';
      12. print_r($stmt->errorInfo());
      13. }
  3. delete(删除)

    1. 语法:DELETE FROM 表名 SET 字段1=值1 ... WHERE 更新条件
    2. 创建SQL语句模板对象

      1. //:id 命名占位符,比较灵活摆脱了顺序,格式 :名称
      2. //下面执行的时候,也要用同样的命名占位符
      3. $sql = 'DELETE FROM `staff` WHERE `id` = :id';
      4. $stmt = $db->prepare($sql);
    3. 执行SQL语句$stmt->execute([':id' => 5]);
    4. 完整代码

      1. // 1. 连接数据库
      2. require __DIR__ . '/config/connect.php';
      3. // 2. CURD: DELETE 删除
      4. // DELETE FROM 表名 SET 字段1=值1 ... WHERE 更新条件
      5. // $sql = 'DELETE FROM `staff` WHERE `id` = ? ';
      6. // '?' : 匿名占位符
      7. // 'string': 命名占位符
      8. $sql = 'DELETE FROM `staff` WHERE `id` = :id';
      9. $stmt = $db->prepare($sql);
      10. // 如果条件来自外部, 例如 url 中 get 参数
      11. // echo $_GET['id'];
      12. //:id 的:可选 也可以不写
      13. //$stmt->execute([':id' => $_GET['id']]);
      14. $stmt->execute(['id' => $_GET['id']]);
      15. if ($stmt->rowCount() > 0) {
      16. echo 'id = ' . $_GET['id'] . ' 删除成功';
      17. } else {
      18. echo '删除失败';
      19. print_r($stmt->errorInfo());
      20. }
批改老师:PHPzPHPz

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学