Blogger Information
Blog 30
fans 0
comment 0
visits 13892
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP数据库的CURD操作
天宁
Original
556 people have browsed it

数据库操作流程

连接数据库
  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. }
Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
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