Blogger Information
Blog 33
fans 0
comment 0
visits 18644
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
实例演示数据库的增删改查操作
李玉峰
Original
570 people have browsed it

一. 实例演示数据库的CURD操作

1.数据库连接文件

  1. <?php
  2. namespace pdo_edu;
  3. use PDO;
  4. $dbConfig = require 'database.php';
  5. extract($dbConfig);
  6. // pdo连接三要素
  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. //!2.创建数据对象
  12. $db = new PDO($dsn,$username,$password);

2.数据库配置信息

  1. <?php
  2. namespace pdo_edu;
  3. return
  4. [
  5. //dsn
  6. 'type'=>'mysql',
  7. 'host'=>'127.0.0.1',
  8. 'dbname'=>'phpedu',
  9. 'port'=>'3306',
  10. 'charset'=>'utf8',
  11. //username
  12. 'username'=>'root',
  13. 'password'=>'phpedu',
  14. ];

3.数据库的CURD操作

INSERT:添加一条或者多条数据
  1. <?php
  2. namespace php_edu;
  3. /**
  4. * 数据库常用操作
  5. * 1.读操作:select
  6. * 2.写操作:insert,update,delete
  7. * 简称:CURD,增删改查
  8. */
  9. //1.连接数据库
  10. require __DIR__ . '/config/connect.php';
  11. //2.CURD:INSERT
  12. //INSERT 插入
  13. // INSERT 表名 SET 字段1=值1,字段2=值2,...
  14. //注意事项
  15. //1.关键字全大写
  16. //2.表名和字段名使用反引号作为定界符
  17. $sql = 'INSERT `staff` SET `name` = ?,`sex` = ?,`email` = ?';
  18. //!1.创建SQL语句模板对象:使用占位符表示
  19. $stmt = $db->prepare($sql);
  20. // var_dump($stmt);
  21. //!2.执行SQL语句
  22. // 可以添加一条或者多条
  23. $stmt->execute(['曹操',0,'caocao@123.com']);
  24. $stmt->execute(['刘备',0,'liubei@123.com']);
  25. $stmt->execute(['貂蝉',1,'diaochan@123.com']);
  26. //成功
  27. // $stmt->rowCount():返回受影响的记录数量
  28. if($stmt->rowCount() > 0) {
  29. echo '新增成功,新增记录的最后主键ID=' . $db->lastInsertId();
  30. } else{
  31. echo '新增失败';
  32. print_r($stmt->errorInfo());
  33. }
INSERT:添加一条或者多条数据
  1. <?php
  2. namespace php_edu;
  3. //1.连接数据库
  4. require __DIR__ . '/config/connect.php';
  5. //2.CURD:UPDATE 更新操作
  6. // UPDATE 表名 SET 字段1=值1,字段2=值2,...WHERE 更新条件
  7. $sql = 'UPDATE `staff` SET `name` = ?,`email` = ? WHERE `id`=?';
  8. //!1.创建SQL语句模板对象:使用占位符表示
  9. $stmt = $db->prepare($sql);
  10. // var_dump($stmt);
  11. //!2.执行SQL语句
  12. // 更新一条或者多条
  13. $stmt->execute(['小龙女','xiaolongnv@123.com','4']);
  14. //成功
  15. // $stmt->rowCount():返回受影响的记录数量
  16. if($stmt->rowCount() > 0) {
  17. echo '更新成功';
  18. } else{
  19. echo '更新失败';
  20. print_r($stmt->errorInfo());
  21. }
DELETE 删除操作
  1. <?php
  2. namespace php_edu;
  3. //1.连接数据库
  4. require __DIR__ . '/config/connect.php';
  5. //2.CURD:DELETE 删除操作
  6. // DELETE FROM 表名 WHERE 更新条件
  7. // $sql = 'DELETE FROM `staff` WHERE `id`=?';
  8. //'?':匿名占位符
  9. //'string':命名占位符
  10. $sql = 'DELETE FROM `staff` WHERE `id`= :id';
  11. //!1.创建SQL语句模板对象:使用占位符表示
  12. $stmt = $db->prepare($sql);
  13. // var_dump($stmt);
  14. //!2.执行SQL语句
  15. // 更新一条或者多条
  16. // $stmt->execute(['2']);
  17. // $stmt->execute([':id'=>4]);
  18. //通过外部参数删除:例如URL中的get参数删除
  19. // echo $_GET['id'];
  20. // $stmt->execute([':id'=>4]);
  21. $stmt->execute([':id'=>$_GET['id']]);
  22. //成功
  23. // $stmt->rowCount():返回受影响的记录数量
  24. if($stmt->rowCount() > 0) {
  25. echo '删除成功';
  26. } else{
  27. echo '删除失败';
  28. print_r($stmt->errorInfo());
  29. }
SELECT 查询操作

单条数据

  1. <?php
  2. namespace php_edu;
  3. use PDO;
  4. //1.连接数据库
  5. require __DIR__ . '/config/connect.php';
  6. //2.CURD:SELECT 查询操作
  7. // SELECT 字段列表 FROM 表名 WHERE 查询条件 LIMIT
  8. $sql = 'SELECT `id`,`name` FROM `staff` WHERE `id` > :id';
  9. //!1.创建SQL语句模板对象:使用占位符表示
  10. $stmt = $db->prepare($sql);
  11. // var_dump($stmt);
  12. //!2.执行SQL语句
  13. $stmt->execute(['id' =>'3']);
  14. //单条查询
  15. // $staff = $stmt->fetch();
  16. //PDO::FETCH_ASSOC:结果集只返回关联数组数据
  17. // $staff = $stmt->fetch(PDO::FETCH_ASSOC);
  18. // printf('<pre>%s</pre>', print_r($staff,true));
  19. // //再执行一遍,指针查询下一条
  20. // $staff = $stmt->fetch(PDO::FETCH_ASSOC);
  21. // printf('<pre>%s</pre>', print_r($staff,true));
  22. //用循环查询符合条件的全部数据
  23. // while($staff = $stmt->fetch(PDO::FETCH_ASSOC)){
  24. // printf('<pre>%s</pre>', print_r($staff,true));
  25. // }
  26. //在connect.php文件中统一设置数据模式:$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
  27. while($staff = $stmt->fetch()){
  28. printf('<pre>%s</pre>', print_r($staff,true));
  29. }

多条查询

  1. <?php
  2. namespace php_edu;
  3. use PDO;
  4. //1.连接数据库
  5. require __DIR__ . '/config/connect.php';
  6. //2.CURD:SELECT 查询操作
  7. // SELECT 字段列表 FROM 表名 WHERE 查询条件 LIMIT
  8. $sql = 'SELECT `id`,`name` FROM `staff` WHERE `id` > :id';
  9. //!1.创建SQL语句模板对象:使用占位符表示
  10. $stmt = $db->prepare($sql);
  11. // var_dump($stmt);
  12. //!2.执行SQL语句
  13. $stmt->execute(['id' =>'3']);
  14. //fetchALL():返回全部满足条件的记录集合
  15. $staffs = $stmt->fetchALL();
  16. // print_r($staffs);
  17. foreach ($staffs as $staff){
  18. printf('<pre>%s</pre>', print_r($staff,true));
  19. }

二. PDO的本质与原理是什么?为什么要用预处理?

PDO的本质是将SQL语句和数据分开,编程时只写SQL语句模板,执行SQL时再给占位符绑定真实数据。用预处理的好处有:第一,预处理语句占用更少的资源,因而运行得更快。第二,防止SQL注入攻击。

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