博客列表 >【PHP】PDO常用的CURD操作

【PHP】PDO常用的CURD操作

可乐随笔
可乐随笔原创
2022年12月30日 21:14:421821浏览

PDO常用的CURD操作

1.数据库配置文件,示例

  1. <?php
  2. // database.php
  3. // 数据库连接默认参数
  4. return [
  5. // 数据库的类型
  6. 'type' => 'mysql',
  7. // 数据库默认主机
  8. 'host' => 'localhost',
  9. // 默认数据库
  10. 'dbname' => 'dbname',
  11. // 默认的用户名
  12. 'username' => 'username',
  13. // 默认的用户密码
  14. 'password' => 'username',
  15. // 默认端口号
  16. 'port' => '3306',
  17. // 默认字符编码集
  18. 'charset' => 'utf8',
  19. ];

2.数据库连接文件,示例

2.1 获取配置项
2.2 自定义数据库配置
2.3 用自定义数组替换获取的配置项
$config = array_merge($config, $custom);
2.4 解析配置项(将配置项中的数组值解析到变量)
['username'=>$username,'password'=>$password] = $config;
2.5 创建数据源DSN(连接语句对象化)
2.6 创建PDO实例(连接数据库,在此时进行传参)

  1. <?php
  2. // 连接数据库
  3. // 1. 获取配置项
  4. $config = require __DIR__ . '/database.php';
  5. // print_r($config);
  6. // 自定义配置
  7. $custom = [
  8. // 数据库默认主机
  9. 'host' => 'localhost',
  10. // 默认数据库
  11. 'dbname' => 'phpedu',
  12. // 默认的用户名
  13. 'username' => 'root',
  14. // 默认的用户密码
  15. 'password' => 'root',
  16. ];
  17. // 数组替换更新
  18. $config = array_merge($config, $custom);
  19. // print_r($config);
  20. // 2. 解析配置项
  21. // ['id'=>$id, 'name'=>$name]=['id'=>1,'name'=>'a'];
  22. ['type'=>$type,'host'=>$host,'dbname'=>$dbname] = $config;
  23. ['username'=>$username,'password'=>$password] = $config;
  24. ['port'=>$port,'charset'=>$charset] = $config;
  25. // echo $type, $username, $charset;
  26. // extract($config);
  27. // 3. 创建数据源DSN
  28. // echo vsprintf('%s,%s,%s', ['php','cn','zhu']);
  29. $tmpl = '%s:host=%s;dbname=%s;port=%s;charset=%s';
  30. $params = [$type,$host,$dbname,$port,$charset];
  31. $dsn = vsprintf($tmpl, $params);
  32. // echo $dsn;
  33. // 4. 创建PDO实例(连接数据库)
  34. try {
  35. $db = new PDO($dsn, $username, $password);
  36. // if ($db) {
  37. // echo '连接成功';
  38. // }
  39. // var_dump($db);
  40. // 设置结果集的获取模式: 仅返回关联部分
  41. $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
  42. } catch (PDOException $e) {
  43. die('连接失败' . $e->getMessage());
  44. }

3. 连接数据库实例(单一文件)

  1. <?php
  2. // 快速预览
  3. // 1.连接数据库
  4. $db = new PDO('mysql:dbname=phpedu','root','root');
  5. // 2.执行SQL
  6. $stmt = $db->prepare('select id,name,email from user limit 1');
  7. $stmt ->execute();
  8. print_r($stmt->fetch(PDO::FETCH_ASSOC));
  9. // 3.关闭连接
  10. unset($db);

简化版

  1. <?php
  2. // ? 连接数据库
  3. // 1. 连接数据库: PDO类实例
  4. $username = 'root';
  5. $password = 'root';
  6. $dsn = 'mysql:dbname=phpedu';
  7. try {
  8. $db = new PDO($dsn, $username, $password);
  9. if ($db) {
  10. echo '连接成功';
  11. }
  12. } catch (PDOException $e) {
  13. die('连接失败' . $e->getMessage());
  14. }

4.数据库操作之:新增(Insert)(命名占位符)

  1. <?php
  2. // ? 新增: INSERT-1
  3. // 1. 连接数据库
  4. require __DIR__ . '/config/connect.php';
  5. // 2. 执行操作
  6. // sql: 预处理,sql中的数据使用占位符(参数)
  7. // 参数有二种: (1) 命名占位符 ":email" (2) 匿名占位符: "?"
  8. $sql = 'INSERT user VALUES (null,:uname,:email,:password)';
  9. // ? 创建sql语句对象 PDOStatement的实例
  10. $stmt = $db->prepare($sql);
  11. // var_dump($stmt);
  12. // ? 将具体的值绑定到参数上
  13. $stmt->bindValue('uname', '老张');
  14. $stmt->bindValue('email', 'lz@qq.com');
  15. $stmt->bindValue('password', md5('123'));
  16. // 查看一下预处理sql语句
  17. // $stmt->debugDumpParams();
  18. // ? 执行sql
  19. if ($stmt->execute()) {
  20. // 成功
  21. echo '新增成功, 新记录的主键ID = ' . $db->lastInsertId();
  22. } else {
  23. echo '新增失败';
  24. print_r($stmt->errorInfo());
  25. }
  26. // 3. 关闭连接(可选)
  27. // unset($db);
  28. // $db = null;

4.数据库操作之:新增2(匿名占位符)

  1. <?php
  2. // ? 新增: INSERT-2
  3. // 1. 连接数据库
  4. require __DIR__ . '/config/connect.php';
  5. // 2. 执行操作
  6. // sql: 预处理,sql中的数据使用占位符(参数)
  7. // 参数有二种: (1) 命名占位符 ":email" (2) 匿名占位符: "?"
  8. $sql = 'INSERT user VALUES (null,?,?,?)';
  9. // ? 创建sql语句对象 PDOStatement的实例
  10. $stmt = $db->prepare($sql);
  11. // ? 执行sql
  12. if ($stmt->execute(['小猪', 'xz@php.cn', md5('abc')])) {
  13. // 成功
  14. echo '新增成功, 新记录的主键ID = ' . $db->lastInsertId();
  15. } else {
  16. echo '新增失败';
  17. print_r($stmt->errorInfo());
  18. }
  19. // 3. 关闭连接(可选)
  20. // unset($db);
  21. // $db = null;

5. 数据库操作之:更新

  1. <?php
  2. // ? 更新: UPDATE
  3. // 1. 连接数据库
  4. require __DIR__ . '/config/connect.php';
  5. // 2. 执行操作
  6. $sql = 'UPDATE user SET uname= ? WHERE id = ?';
  7. // $sql = 'UPDATE user SET uname= ?';
  8. // 检测sql语句中是否存在 where 条件?没有则禁止执行
  9. if (!stristr($sql, 'WHERE')) {
  10. die('禁止无条件更新');
  11. }
  12. // ? 创建sql语句对象
  13. $stmt = $db->prepare($sql);
  14. // ? 将某个变量绑定到参数上
  15. $stmt->bindParam(1, $uname);
  16. $stmt->bindParam(2, $id);
  17. $uname = '西门庆';
  18. $id = 4;
  19. // ? 执行sql
  20. if ($stmt->execute()) {
  21. // $stmt->debugDumpParams();
  22. // 更新成功有二种情况,1.数据变化了,2.数据没有发生变化
  23. // rowCount(): 返回受影响的记录数量(修改了)
  24. if ($stmt->rowCount() > 0) {
  25. echo '更新成功';
  26. } else {
  27. echo '没有记录被更新';
  28. }
  29. } else {
  30. // echo '更新失败';
  31. // print_r($stmt->errorInfo());
  32. die('更新失败: '. $stmt->errorInfo()[2]);
  33. }

6.数据库操作之:删除

  1. <?php
  2. // ? 删除: DELETE
  3. // 1. 连接数据库
  4. require __DIR__ . '/config/connect.php';
  5. // 2. 执行操作
  6. $sql = 'DELETE FROM user WHERE id = ?';
  7. // $sql = 'DELETE FROM user';
  8. // 检测sql语句中是否存在 where 条件?没有则禁止执行
  9. if (!stristr($sql, 'WHERE')) {
  10. die('禁止无条件删除');
  11. }
  12. // ? 创建sql语句对象
  13. $stmt = $db->prepare($sql);
  14. // ? 执行sql
  15. if ($stmt->execute([4])) {
  16. if ($stmt->rowCount() > 0) {
  17. echo '删除成功';
  18. } else {
  19. echo '没有记录被删除';
  20. }
  21. } else {
  22. die('删除失败: '. $stmt->errorInfo()[2]);
  23. }

7.数据库操作之:查询1

  1. <?php
  2. // ? 查询: SELECT-1
  3. // 1. 连接数据库
  4. require __DIR__ . '/config/connect.php';
  5. // 2. 执行操作
  6. $sql = 'SELECT id,uname,email FROM user WHERE id IN (?,?,?)';
  7. // ? 创建sql语句对象
  8. $stmt = $db->prepare($sql);
  9. // ? 执行sql
  10. if ($stmt->execute([2, 3, 6])) {
  11. // 查询成功,结果集解析到数组中
  12. // 1. 逐条: fetch + while
  13. // 2. 多条: fetchAll + foreach
  14. // print_r($stmt->fetch());
  15. // print_r($stmt->fetch());
  16. // print_r($stmt->fetch());
  17. // print_r($stmt->fetch(PDO::FETCH_ASSOC));
  18. // print_r($stmt->fetch(PDO::FETCH_NUM));
  19. // fetch + while
  20. while ($user = $stmt->fetch()) {
  21. print_r($user);
  22. }
  23. } else {
  24. die('查询失败: ' . $stmt->errorInfo()[2]);
  25. }

7.数据库操作之:查询2

  1. <?php
  2. // ? 查询: SELECT-1
  3. // 1. 连接数据库
  4. require __DIR__ . '/config/connect.php';
  5. // 2. 执行操作
  6. $sql = 'SELECT id,uname,email FROM user WHERE id IN (?,?,?)';
  7. // ? 创建sql语句对象
  8. $stmt = $db->prepare($sql);
  9. // ? 执行sql
  10. if ($stmt->execute([2, 3, 6])) {
  11. // 查询成功,结果集解析到数组中
  12. // 1. 逐条: fetch + while
  13. // 2. 多条: fetchAll + foreach
  14. // print_r($stmt->fetch());
  15. // print_r($stmt->fetch());
  16. // print_r($stmt->fetch());
  17. // print_r($stmt->fetch(PDO::FETCH_ASSOC));
  18. // print_r($stmt->fetch(PDO::FETCH_NUM));
  19. // fetch + while
  20. while ($user = $stmt->fetch()) {
  21. print_r($user);
  22. }
  23. } else {
  24. die('查询失败: ' . $stmt->errorInfo()[2]);
  25. }

7.数据库操作之:查询3

  1. <?php
  2. // ? 查询: SELECT-3: 将列名绑定到变量上
  3. // 1. 连接数据库
  4. require __DIR__ . '/config/connect.php';
  5. // 2. 执行操作
  6. $sql = 'SELECT id,uname,email FROM user WHERE id IN (?,?,?)';
  7. // ? 创建sql语句对象
  8. $stmt = $db->prepare($sql);
  9. // ? 执行sql
  10. if ($stmt->execute([2,3,6])) {
  11. // 将每一列的值,绑定到指定变量上
  12. // 三个字段,三个变量
  13. // 字段的索引,1,2,3,4....
  14. // $stmt->bindColumn(1, $id);
  15. // $stmt->bindColumn(2, $uname);
  16. // $stmt->bindColumn(3, $email);
  17. // 用字段名称
  18. $stmt->bindColumn('id', $id);
  19. $stmt->bindColumn('uname', $uname);
  20. $stmt->bindColumn('email', $email);
  21. while ($stmt->fetch()) {
  22. printf("%d: %s ( %s )\n", $id, $uname, $email);
  23. }
  24. } else {
  25. die('查询失败: '. $stmt->errorInfo()[2]);
  26. }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议