博客列表 >数据库的CURD操作、PDO本质与原理的学习

数据库的CURD操作、PDO本质与原理的学习

阿杰
阿杰原创
2022年07月09日 11:24:16604浏览

一、数据库的CURD操作

  • 操作简称:CURD,增删改查、它代表创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)操作。

  • 连接数据库

  1. <?php
  2. namespace pdo_deu;
  3. return [
  4. // dsn
  5. 'type' => 'mysql',
  6. 'host' => '127.0.0.1',
  7. 'dbname' => 'mydb',
  8. 'port' => '3306',
  9. 'charset' => 'utf8',
  10. // username
  11. 'username' => 'myshop',
  12. 'password' => 'yzj123',
  13. ];
  1. <?php
  2. namespace pdo_deu;
  3. use PDO;
  4. $dbConfig = require 'database.php';
  5. extract($dbConfig); //extract()提取参数 将关联数组中的每一个成员,打散成独立变量
  6. // printf('<pre>%s</pre>',print_r($dbConfig,true));
  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. // var_dump($db);
  15. if($db){
  16. echo '数据库连接成功!';
  17. }
  18. // 设置结果集的默认获取模式:只要关联部分
  19. $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

1、CURD: INSERT 插入数据

  1. <?php
  2. namespace php_edu;
  3. // 1、连接数据库
  4. require __DIR__ .'/config/connect.php';
  5. $sql = 'INSERT `staff` SET `name` = ?, `sex` = ?, `email` = ?';
  6. $stmt = $db->prepare($sql);
  7. //2、执行SQL语句
  8. $stmt->execute(['小龙女', 1, 'xiaolongnv@php.cn']);
  9. $stmt->execute(['洪七公', 0, 'hongqigong@php.cn']);
  10. $stmt->execute(['黄蓉', 0, 'huangrong@php.cn']);
  11. // 成功
  12. if($stmt->rowCount() > 0){
  13. echo '新增成功,新增记录的主键ID = ' . $db->lastInsertId();
  14. }else{
  15. echo '新增失败';
  16. print_r($stmt->errorInfo());
  17. }

2、CURD: UPDATE

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

3、CURD: DELETE

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

4、CURD: SELECT
(1)单条查询

  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 查询条件
  8. $sql = 'SELECT `id`,`name` FROM `staff` WHERE `id` > :id';
  9. $stmt = $db->prepare($sql);
  10. $stmt->execute(['id'=>0]);
  11. // 单条查询
  12. // $staff = $stmt->fetch(PDO::FETCH_ASSOC);
  13. // printf('<pre>%s</pre>',print_r($staff,true));
  14. // PDO::FETCH_ASSOC:结果集获取模式,只返回关联部分
  15. while($staff = $stmt->fetch()){
  16. printf('<pre>%s</pre>',print_r($staff,true));
  17. }

(2)多条查询

  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 查询条件
  8. $sql = 'SELECT `id`,`name` FROM `staff` WHERE `id` > :id';
  9. $stmt = $db->prepare($sql);
  10. $stmt->execute(['id' => 1]);
  11. // fetchAll: 返回全部满足条件的记录集合,二维数组
  12. $staffs = $stmt->fetchAll();
  13. // print_r($staffs);
  14. printf('<pre>%s</pre>',print_r($staffs,true));
  15. foreach($staffs as $staff){
  16. printf('<pre>%s</pre>',print_r($staff,true));
  17. }

二、PDO

(1)为什么要用预处理(语句被执行前进行一些处理)

  • 1、防止SQL注入攻击

  • 2、数据延迟绑定

  • 3、编程时只写SQL语句模板,执行SQL时再给占位符绑定真实数据

(2)预处理过程

  • 1、创建SQL语句模板对象:数据使用占位符表示
  • 2、执行SQL语句,根据操作类型(写/读),读返回结果集/数组,写返回受影响的记录数量
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议