博客列表 >数据库操作的回顾和总结(0720)

数据库操作的回顾和总结(0720)

丶久而旧之丶
丶久而旧之丶原创
2020年08月09日 14:02:48604浏览

mysql和pdo总结

数据库操作

序号 步骤 描述
1 连接数据库 创建$mysql或者$pdo对象
2 操作数据表 对数据库中数据增(INSERT)、删(DELETE)、查(SELECT)、改(UPDATE)操作
3 关闭数据库连接 也就是销毁数据库对象
操作数据表主要分为读和写
  • 写操作(INSERT/UPDATE/DELETE)返回受影响的行数
  • INSERT操作默认追加到数据表中的末尾所以是没有涉及条件单其他操作都是需要涉及到条件的
  • 读操作(SELECT)返回结果集(对于数据表示没有影响的)

连接参数

序号 参数 描述
1 type 数据库类型
2 host 数据库主机名
3 dbname 数据库名
4 username 用户名
5 password 用户密码
6 charset 默认编码集
7 port 默认端口号

配置文件

  1. <?php
  2. // 数据库类型
  3. define('DB_TYPE', 'mysql');
  4. // 数据库主机名
  5. define('DB_HOST', 'localhost');
  6. // 数据库名
  7. define('DB_NAME', 'user');
  8. // 数据库用户名
  9. define('DB_USER', 'root');
  10. // 数据库密码
  11. define('DB_PSD', 'root');
  12. // 数据库默认端口号
  13. define('DB_PORT', 3306);
  14. // 数据库编码集
  15. define('DB_CHARSET', 'utf8');
  16. // 定义pdo中dsn的主机名,数据库型号,数据库名和编码方式
  17. define('DB_DSN', DB_TYPE . ':host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=' . DB_CHARSET);

mysqli

1.连接数据库

  1. <?php
  2. // 引入配置文件
  3. require __DIR__ . "/config.php";
  4. // 1.连接数据库
  5. $mysql = new mysqli(DB_HOST, DB_USER, DB_PSD, DB_NAME);
  6. // 检测错误
  7. if ($mysql->connect_errno) die('Connect_errno:' . $mysql->connect_error);
  8. // 设置编码集
  9. $mysql->set_charset(DB_CHARSET);

2.数据表操作

  • 新增操作
  1. <?php
  2. // 新增操作(插入)用预处理方式
  3. $sql = 'INSERT `apple` SET `username`=? ,`password`=?, `sex`=?';
  4. // 准备执行(转为statement对象)
  5. $stmt = $mysql->prepare($sql);
  6. // 绑定占位符
  7. $stmt->bind_param('sss', $username, $password, $sex);
  8. // 变量赋值
  9. $username = '小孔';
  10. $password = sha1(123);
  11. $sex = '男';
  12. // 执行
  13. $stmt->execute();
  14. // 返回受影响的行数
  15. printf('新增了 %s 条记录,新增的id为 %d', $stmt->affected_rows, $stmt->insert_id);
  16. // 也可以通过遍历一个二维数组实现一次性插入多条数据
  17. $as = [
  18. ['username' => '小小', 'password' => sha1(123), 'sex' => '男'],
  19. ['username' => '小康', 'password' => sha1(222), 'sex' => '女'],
  20. ['username' => '小于', 'password' => sha1(333), 'sex' => '女'],
  21. ['username' => '小文', 'password' => sha1(444), 'sex' => '男'],
  22. ['username' => '小群', 'password' => sha1(555), 'sex' => '男'],
  23. ];
  24. // 遍历数组
  25. foreach ($as as $a) {
  26. // 展开数组
  27. extract($a);
  28. // 判断是否执行成功
  29. if ($stmt->execute()) {
  30. printf('新增了 %s 条数据,新增的id为 %d<br>', $stmt->affected_rows, $stmt->insert_id);
  31. } else {
  32. exit(sprintf('新增失败,%d:%s', $stmt->connect_errno, $stmt->connect_error));
  33. }
  34. }

  • 更新操作
  1. <?php
  2. // 更新操作
  3. $sql = "UPDATE `apple` SET `username`=?, `password`=?, `sex`=? WHERE `id`=?";
  4. // 准备执行(转为statement对象)
  5. $stmt = $mysql->prepare($sql);
  6. // 绑定占位符
  7. $stmt->bind_param('sssi', $username, $password, $sex, $id);
  8. $a = ['username' => '小卡', 'password' => sha1(111), 'sex' => '女', 'id' => 25];
  9. // 展开数组
  10. extract($a);
  11. if ($stmt->execute()) {
  12. printf('更新成功,更新了 %s 条数据', $stmt->affected_rows);
  13. } else {
  14. exit(sprintf('更新失败,%d:%s', $stmt->connect_errno, $stmt->connect_error));
  15. }

  • 删除操作
  1. <?php
  2. // 删除操作
  3. $sql = "DELETE FROM `apple` WHERE `id`=?";
  4. // 准备执行(转为statement对象)
  5. $stmt = $mysql->prepare($sql);
  6. // 绑定占位符
  7. $stmt->bind_param('i', $id);
  8. $id = 5;
  9. // 执行
  10. if ($stmt->execute()) {
  11. printf('删除成功,删除了 %s 条数据', $stmt->affected_rows);
  12. } else {
  13. exit(sprintf('删除失败,%d:%s', $stmt->connect_errno, $stmt->connect_error));
  14. }

  • 查询操作
  1. <?php
  2. $sql = "SELECT * FROM `apple` WHERE `id`>?";
  3. // 准备执行(转为statement对象)
  4. $stmt = $mysql->prepare($sql);
  5. // 绑定占位符
  6. $stmt->bind_param('i', $id);
  7. $id = 20;
  8. // 执行
  9. $stmt->execute();
  10. if ($stmt->affected_rows === 0) exit('查询失败');
  11. // 获取结果集
  12. $res = $stmt->get_result();
  13. 打印结果集
  14. print_r($res->fetch_assoc());
  15. print_r($res->fetch_assoc());
  16. // 遍历结果
  17. // 1.fetch_assoc()+while()获取结果集
  18. while ($a = $res->fetch_assoc()) {
  19. printf('id= %d 姓名= %s 性别= %s <br>', $a['id'], $a['username'], $a['sex']);
  20. }
  21. // 2.fetch_all()+foreach()获取结果集
  22. foreach ($res->fetch_all(MYSQLI_ASSOC) as $a) {
  23. printf('序号= %d:姓名= %s 性别= %s<br>', $a['id'], $a['username'], $a['sex']);
  24. }
  25. // 3.bind_result()+fetch()+while()将结果集的字段与一个变量绑定
  26. $sql = "SELECT `id` , `username` , `sex` FROM `apple` WHERE `id`>? ";
  27. // 准备执行(转为statement对象)
  28. $stmt = $mysql->prepare($sql);
  29. $stmt->bind_param('i', $id);
  30. $id = 23;
  31. $stmt->execute() or die($stmt->error);
  32. // 将结果字段绑定到变量中(跳过了结果集)
  33. $stmt->bind_result($id, $name, $sex);
  34. // 用while()遍历
  35. while ($stmt->fetch()) {
  36. printf('序号= %d :姓名= %s 性别= %s <br>', $id, $name, $sex);
  37. }
fetch_assoc()+while()获取结果集

2.fetch_all()+foreach()获取结果集

3.bind_result()+fetch()+while()将结果集的字段与一个变量绑定

3.关闭数据库连接

  1. <?php
  2. $mysql->close();

PDO

1.连接数据库

  1. <?php
  2. // 引入配置文件
  3. require __DIR__ . '/config.php';
  4. // 连接数据库
  5. try {
  6. $pdo = new PDO(DB_DSN, DB_USER, DB_PSD);
  7. } catch (PDOException $e) {
  8. echo $e->getMessage();
  9. }
  10. // 设置结果集默认默认获取模式
  11. $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

2.数据表操作

  • 新增操作

  1. <?php
  2. // 新增(插入)操作
  3. $sql = "INSERT `apple` SET `username`=?, `password`=?, `sex`=?";
  4. // 准备执行
  5. $stmt = $pdo->prepare($sql);
  6. // 绑定占位符
  7. // PDO::PARAM_STR, 30 确认数据类型和字符位数
  8. $stmt->bindParam(1, $name, PDO::PARAM_STR, 30);
  9. $stmt->bindParam(2, $password, PDO::PARAM_STR, 40);
  10. $stmt->bindParam(3, $sex, PDO::PARAM_STR, 10);
  11. // 变量赋值
  12. $name = '小环';
  13. $password = sha1(222);
  14. $sex = '女';
  15. // bindValue()值绑定,变量的变化实时映射到占位符上,因此每一次都必须重新赋值
  16. // 值绑定可通过execute()实现
  17. if ($stmt->execute(['小话', sha1(333), '男'])) {
  18. // rowCount()获取受影响的行数
  19. // lastInsertId()获取主键id
  20. printf('新增成功 %s 条数据,新增的主键id= %d', $stmt->rowCount(), $pdo->lastInsertId());
  21. }

值绑定

  • 更新操作

  1. <?php
  2. // 更新操作
  3. $sql = "UPDATE `apple` SET `username`=?, `password`=?, `sex`=? WHERE `id`=?";
  4. // 准备执行
  5. $stmt = $pdo->prepare($sql);
  6. // 值绑定占位符
  7. if ($stmt->execute(['小星星', sha1(333), '男', 28])) {
  8. printf('更新成功 %s 条数据', $stmt->rowCount());
  9. }

  • 删除操作

  1. <?php
  2. // 删除操作
  3. $sql = "DELETE FROM `apple` WHERE `id`=?";
  4. // 准备执行
  5. $stmt = $pdo->prepare($sql);
  6. // 值绑定占位符
  7. if ($stmt->execute([17])) {
  8. printf('删除成功 %s 条数据', $stmt->rowCount());
  9. }

  • 查询操作

  1. <?php
  2. $sql = "SELECT `id`, `username`, `sex` FROM `apple` WHERE `id`>?";
  3. // 准备执行
  4. $stmt = $pdo->prepare($sql);
  5. // 值绑定占位符
  6. $stmt->execute([20]);
  7. // 1.通过fetch()+while()获取结果
  8. while ($a = $stmt->fetch()) {
  9. vprintf('<li>序号:%d,姓名= %s 性别= %s</li><br>', $a);
  10. }
  11. // 2.fetchAll()+foreach()获取结果
  12. foreach ($stmt->fetchAll() as $a) {
  13. vprintf('<li>序号:%d,姓名= %s 性别= %s</li><hr>', $a);
  14. }
  15. // 3.bindColumn()+fetch()+while()获取结果
  16. // 将获取结果的字段和变量绑定
  17. $stmt->bindColumn('id', $id);
  18. $stmt->bindColumn('username', $name);
  19. $stmt->bindColumn('sex', $sex);
  20. while ($stmt->fetch()) {
  21. printf('<li>序号:%d,姓名= %s 性别= %s</li><br>', $id, $name, $sex);
  22. }
  23. // 获取记录数量不要用rowCount()获取 用sql语句获取
  24. $sql = "SELECT COUNT(`id`) AS `num` FROM `apple` WHERE `id`>?";
  25. $stmt = $pdo->prepare($sql);
  26. $stmt->execute([20]);
  27. $stmt->bindColumn('num', $num);
  28. $stmt->fetch(PDO::FETCH_BOUND);
  29. printf('满足条件的记录数量:%d', $num);
1.通过fetch()+while()获取结果

2.fetchAll()+foreach()获取结果

3.bindColumn()+fetch()+while()获取结果

4.获取记录数量

总结

1.对于mysqli对象和pdo的方法使用更清楚了
2.对于获取的结果集的多种方法有了更深的理解

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