博客列表 >PDO常用的CURD预处理操作

PDO常用的CURD预处理操作

吴长清
吴长清原创
2022年08月18日 11:22:43285浏览

1.插入数据

1.1 匿名参数+索引数组+值绑定

  1. <?php
  2. namespace pdo;
  3. use PDO;
  4. /**
  5. * 连接数据库
  6. * 参数1:数据库连接字符串 数据库驱动、服务器地址、数据库名称、端口号、字符编码
  7. * 参数2:数据库用户
  8. * 参数3:数据库密码
  9. * 匿名参数+索引数组+值绑定
  10. */
  11. $db = new PDO('mysql:host=localhost;dbname=phpedu;port:3306;charset=utf8', 'root', 'root');
  12. // 创建sql语句 使用匿名参数
  13. $sql = "INSERT `user` SET `name`=?,`sex`=?,`email`=?;";
  14. // 创建PDOStatement对象
  15. $stmt =$db->prepare($sql);
  16. // 索引数组 使用list解构
  17. list($name,$sex,$email) = ['崔瀺',0,'cuichan@qq.com'];
  18. // 值绑定 解决数组传参时,execute()默认参数是字符串类型
  19. // 通过bindValue()值绑定强制转换
  20. // 参数1:数组索引+1 参数2: 传入的数据变量 参数3:数据类型
  21. $stmt->bindValue(1, $name,PDO::PARAM_STR);
  22. $stmt->bindValue(2, $sex,PDO::PARAM_INT);
  23. $stmt->bindValue(3, $email,PDO::PARAM_STR);
  24. // 执行sql
  25. if ($stmt->execute()) {
  26. if ($stmt->rowCount() > 0) {
  27. echo '成功的添加了 '.$stmt->rowCount() . '条记录~~, id为: '. $db->lastInsertId();
  28. } else {
  29. // 主要用于检测是否重复执行
  30. echo '没有添加成功';
  31. print_r($stmt->errorInfo());
  32. }
  33. } else {
  34. echo 'sql执行失败';
  35. print_r($stmt->errorInfo());
  36. }
  37. // 关闭数据库
  38. unset($db);

1.2 命名参数+关联数组+引用绑定

  1. <?php
  2. namespace pdo;
  3. use PDO;
  4. // 连接数据库
  5. // 命名参数+关联数组+引用绑定
  6. $db = new PDO('mysql:host=localhost;dbname=phpedu;port:3306;charset=utf8', 'root', 'root');
  7. // 创建sql语句 使用命名参数
  8. $sql = "INSERT `user` SET `name`=:name,`sex`=:sex,`email`=:email;";
  9. // 创建PDOStatement对象
  10. $stmt = $db->prepare($sql);
  11. // bindParam()引用绑定
  12. // 参数1:键名 参数2: 传入的数据变量 参数3:数据类型
  13. $stmt->bindParam('name', $name, PDO::PARAM_STR);
  14. $stmt->bindParam('sex', $sex, PDO::PARAM_INT);
  15. $stmt->bindParam('email', $email, PDO::PARAM_STR);
  16. // 准备多条数据 关联数组
  17. $data = [
  18. ['name' => '刘十六', 'sex' => 0, 'email' => 'liushiliu@qq.com'],
  19. ['name' => '左右', 'sex' => 0, 'email' => 'zuoyou@qq.com'],
  20. ['name' => '齐静春', 'sex' => 0, 'email' => 'qijingchun@qq.com'],
  21. ['name' => '陈平安', 'sex' => 0, 'email' => 'chenpingan@qq.com']
  22. ];
  23. // 多条数据添加 关联数组解构
  24. foreach ($data as list('name' => $name, 'sex' => $sex, 'email' => $email)) {
  25. // 执行sql
  26. $stmt->execute();
  27. echo '添加成功, id = ' . $db->lastInsertId() . '<br>';
  28. }
  29. // 关闭数据库
  30. unset($db);

2.更新数据

  1. <?php
  2. namespace pdo;
  3. use PDO;
  4. // 连接数据库
  5. $db = new PDO('mysql:host=localhost;dbname=phpedu;port:3306;charset=utf8', 'root', 'root');
  6. // 更新操作 当sql语句过多时,可以用 heredoc 句法结构 来写sql
  7. // 匿名参数
  8. $sql = <<< SQL
  9. UPDATE `user`
  10. SET `name`= ?,`sex`= ?,`email`= ?
  11. WHERE `id` = ? ;
  12. SQL;
  13. // 特别提示:绝对禁止"无条件更新"
  14. // 检测一下sql语句中, 是否存在 where 子句
  15. // strpos, stripos:忽略大小写
  16. if (stripos($sql, 'where')===false) {
  17. exit('禁止无条件更新');
  18. }
  19. // 创建PDOStatement对象
  20. $stmt = $db->prepare($sql);
  21. // 索引数组方式传参 修改id=2的数据
  22. $data = ['宁姚', 1, 'ningyao@qq.com', 2];
  23. // 执行sql
  24. if ($stmt->execute($data)) {
  25. // $stmt->rowCount():返回受影响的行数,大于0则sql执行成功,反之执行失败
  26. if ($stmt->rowCount() > 0) {
  27. echo '成功的更新了 '.$stmt->rowCount() . '条记录~~';
  28. } else {
  29. // 主要用于检测是否重复执行
  30. echo '没有记录被更新';
  31. print_r($stmt->errorInfo());
  32. }
  33. } else {
  34. echo 'sql执行失败';
  35. // 打印失败信息
  36. print_r($stmt->errorInfo());
  37. }
  38. // 关闭数据库
  39. unset($db);

3.删除数据

  1. <?php
  2. namespace pdo;
  3. use PDO;
  4. // 连接数据库
  5. $db = new PDO('mysql:host=localhost;dbname=phpedu;port:3306;charset=utf8', 'root', 'root');
  6. // 删除操作
  7. // 匿名参数
  8. $sql = "DELETE FROM `user` WHERE `id` = ?;";
  9. // 特别提示:绝对禁止"无条件删除"
  10. // 检测一下sql语句中, 是否存在 where 子句
  11. // strpos, stripos: 忽略大小写
  12. if (stripos($sql, 'where') === false) {
  13. exit('禁止无条件删除');
  14. }
  15. // 创建PDOStatement对象
  16. $stmt = $db->prepare($sql);
  17. // 执行sql 删除ID=7的数据
  18. if ($stmt->execute([7])) {
  19. // $stmt->rowCount():返回受影响的行数,大于0则sql执行成功,反之执行失败
  20. if ($stmt->rowCount() > 0) {
  21. echo '成功的删除了 ' . $stmt->rowCount() . '条记录~~';
  22. } else {
  23. // 主要用于检测是否重复执行
  24. echo '没有记录被删除';
  25. print_r($stmt->errorInfo());
  26. }
  27. } else {
  28. echo 'sql执行失败';
  29. // 打印失败信息
  30. print_r($stmt->errorInfo());
  31. }
  32. // 关闭数据库
  33. unset($db);

4.查询操作

4.1 逐条查询 fetch() + while()

  1. <?php
  2. namespace pdo;
  3. use PDO;
  4. // 连接数据库
  5. $db = new PDO('mysql:host=localhost;dbname=phpedu;port:3306;charset=utf8', 'root', 'root');
  6. // 查询?条数据 返回字段有id、name、email,没有sex字段
  7. $sql = 'SELECT `id`,`name`,`email` FROM `user`LIMIT ?';
  8. // 创建PDOStatement对象
  9. $stmt = $db->prepare($sql);
  10. // 值绑定 转为int类型 查询前5条数据
  11. $stmt->bindValue(1, 5, PDO::PARAM_INT);
  12. // 执行sql
  13. if ($stmt->execute()) {
  14. // fetch()逐条查询
  15. // PDO::FETCH_ASSOC 过滤索引数组,保留关联数组
  16. while ($staff = $stmt->fetch(PDO::FETCH_ASSOC)) {
  17. // 格式化打印输出
  18. printf('<pre>%s</pre>', print_r($staff, true));
  19. }
  20. } else {
  21. echo 'sql执行失败';
  22. print_r($stmt->errorInfo());
  23. }
  24. // 关闭数据库
  25. unset($db);

4.2 查询所有 fetchAll() + foreach()

  1. <?php
  2. namespace pdo;
  3. use PDO;
  4. // 连接数据库
  5. $db = new PDO('mysql:host=localhost;dbname=phpedu;port:3306;charset=utf8', 'root', 'root');
  6. // 返回字段有id、name、email,没有sex字段
  7. $sql = 'SELECT `id`,`name`,`email` FROM `user` WHERE id>?;';
  8. // 创建PDOStatement对象
  9. $stmt = $db->prepare($sql);
  10. // 值绑定 转为int类型 查询id大于2的所有数据
  11. $stmt->bindValue(1, 2, PDO::PARAM_INT);
  12. // 执行sql
  13. if ($stmt->execute()) {
  14. // fetchAll(): 获取全部满足条件的记录
  15. // PDO::FETCH_ASSOC 过滤索引数组,保留关联数组
  16. $staffs = $stmt->fetchAll(PDO::FETCH_ASSOC);
  17. foreach ($staffs as $staff) {
  18. // 格式化打印输出
  19. printf('<pre>%s</pre>', print_r($staff, true));
  20. }
  21. } else {
  22. echo 'sql执行失败';
  23. print_r($stmt->errorInfo());
  24. }
  25. // 关闭数据库
  26. unset($db);

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议