Blogger Information
Blog 48
fans 3
comment 1
visits 30310
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PDO常用的CURD预处理操作
吴长清
Original
286 people have browsed it

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);

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