Blogger Information
Blog 48
fans 0
comment 0
visits 34180
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
数据库操作的回顾和总结(0720)
丶久而旧之丶
Original
602 people have browsed it

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.对于获取的结果集的多种方法有了更深的理解

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:pdo操作是目前 的主流
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