博客列表 >PHP打通数据奇经八脉,PDO操控数据库实战演练,增删改查(CURD) ~

PHP打通数据奇经八脉,PDO操控数据库实战演练,增删改查(CURD) ~

张福根一修品牌运营
张福根一修品牌运营原创
2020年11月27日 22:09:14645浏览

PDO数据库操作

数据库

连接数据库

  1. require 'connect.php';

connect.php

  1. <?php
  2. namespace pdo_edu;
  3. $config = require 'database.php';
  4. use PDO;
  5. extract($config);
  6. $dsn = sprintf('%s:host=%s;dbname=%s',$type,$host,$dbname);
  7. try {
  8. $pdo = new PDO($dsn,$username ,$password,[PDO::ATTR_ERRMODE=> PDO::ERRMODE_WARNING]);
  9. $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
  10. } catch(\Exception $e) {
  11. die('Connection error: '. $e->getMessage());
  12. }

database.php

  1. <?php
  2. namespace pdo_edu;
  3. return [
  4. 'type' => $type ?? 'mysql',
  5. 'host' => $host ?? 'localhost',
  6. 'dbname' => $dbname ?? 'study',
  7. 'port' => $port ?? '3306',
  8. 'charset' => $charset ?? 'utf8',
  9. 'username' => $username ?? 'root',
  10. 'password' => $password ?? '123456'
  11. ];

PDO查询数据:

方法一:

  1. $sql = "SELECT * FROM `order` WHERE `id`=1";
  2. $stmt = $pdo->query($sql);
  3. foreach($stmt as $row)
  4. {
  5. var_dump($row);
  6. }
  7. // 结果:array(4) { ["id"]=> string(1) "1" ["name"]=> string(6) "张大" ["pro"]=> string(12) "旧房装修" ["price"]=> string(5) "10.00" }

方法二:防sql注入

  1. // PDO::prepare — 准备要执行的SQL语句并返回一个 PDOStatement 对象
  2. // PDOStatement::execute — 执行一条预处理语句
  3. $sql = "SELECT `id`,`name`,`pro` FROM `order` WHERE `id`>=?;";
  4. $stmt = $pdo->prepare($sql);
  5. $stmt->execute([1]);
  6. // var_dump($stmt->fetch());
  7. while ($order = $stmt->fetch())
  8. {
  9. // vprintf() 函数输出格式化的字符串
  10. vprintf('<li>%s:%s | %s</li>',$order);
  11. }
  12. // 结果:
  13. // 1:张大 | 旧房装修
  14. // 2:小二 | 局部改造
  15. // 3:张三 | 防水补漏
  16. // 4:李四 | 墙面翻新
  17. // 5:小伍 | 水电维修

方法三:防sql注入

  1. $sql = "SELECT `id`,`name`,`pro` FROM `order` WHERE `id`>=?;";
  2. $stmt = $pdo->prepare($sql);
  3. $stmt->execute([3]);
  4. $orders = $stmt->fetchAll();
  5. foreach($orders as $order)
  6. {
  7. vprintf('<li>%s:%s | %s</li>',$order);
  8. }
  9. // 结果:
  10. // 3:张三 | 防水补漏
  11. // 4:李四 | 墙面翻新
  12. // 5:小伍 | 水电维修

2、PDO更新数据

方法一:

  1. $sql = "UPDATE `order` SET `price` = 60 WHERE `id` = 3 ";
  2. $res = $pdo->exec($sql);
  3. var_dump($res);//int(1)
  4. if($res == 0 )
  5. {
  6. var_dump($pdo->errorInfo());
  7. }

方法二:

  1. $sql = 'UPDATE `order` SET `name` = ?,`pro`=?,`price`=? WHERE `id`=?;';
  2. $stmt = $pdo->prepare($sql);
  3. // 将值直接绑定到占位符上
  4. $stmt->execute(['大马猴','门窗维修',30,5]);
  5. if($stmt->rowCount() > 0) echo '更新成功' . $stmt->rowCount() . '条记录';//更新成功1条记录

3、PDO插入操作

  1. $sql = 'INSERT `order` SET `name`=?,`pro`=?,`price`=?;';
  2. $stmt = $pdo->prepare($sql);
  3. // PDOStatement::bindParam — 绑定一个参数到指定的变量名
  4. $stmt->bindParam(1,$name);
  5. $stmt->bindParam(2,$pro);
  6. $stmt->bindParam(3,$price);
  7. $name= '东方不败';
  8. $pro = '马桶疏通';
  9. $price = 50.25;
  10. $stmt ->execute();
  11. $stmt->rowCount();
  12. if($stmt->rowCount() > 0) echo '新增成功' . $stmt->rowCount() . '条记录,主键id:' . $pdo->lastInsertId();
  13. // 执行结果:新增成功1条记录,主键id:6

4、PDO删除操作

  1. $sql = 'DELETE FROM `order` WHERE `id`= ?;';
  2. $stmt = $pdo->prepare($sql);
  3. $stmt->execute([3]);
  4. if($stmt->rowCount() > 0) echo '删除成功' . $stmt->rowCount() . '条记录';
  5. // 执行结果:删除成功1条记录

关闭数据连接

  1. $pdo = null;
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议
灭绝师太2020-11-30 10:04:181楼
为福根每次作业的坚持而点赞, 滴水穿石,相信你与其他同学的差距很快就会拉开, 继续坚持~ 预习会话控制~