一. 实例演示数据库的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注入攻击。

更多相关文章

  1. 文件包含与类操作
  2. Android(安卓)之 ContentProvider 与 ContentResolver
  3. Android(安卓)应用界面设计
  4. android 操作sdcard中的多媒体文件(一)——音乐列表的制作
  5. 使用pull解析器操作xml文件
  6. asp程序执行数据库的效率提升建议
  7. MYSQL -(一)CURD/PDO
  8. Android(安卓)文件操作详解及简单实例
  9. android Matrix 操作

随机推荐

  1. android 学习笔记(一)
  2. Android 权限配置
  3. [Android]Android中的Application类
  4. TabHost和TabWidget写出微信下面选项卡的
  5. android activity属性
  6. 01——Introduction to Android介绍
  7. Android获取设备ID号
  8. 跟着Android官方培训课程学习,挖坑填坑记
  9. Android5.x+ 格式化外部存储(u盘, sdcard
  10. Android 游戏开发