Blogger Information
Blog 87
fans 1
comment 0
visits 58490
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
数据库的CURD操作、PDO本质与原理的学习
阿杰
Original
605 people have browsed it

一、数据库的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语句,根据操作类型(写/读),读返回结果集/数组,写返回受影响的记录数量
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