Blogger Information
Blog 32
fans 2
comment 2
visits 23246
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
MySQLi常见CURD操作和接口实战(0211)
暴风战斧
Original
1038 people have browsed it

编程思路

MySQLi常见CURD操作直观好理解,直接写代码;接口实现数据库操作理解的时候容易理解错,多看了几遍视频看课件注释帮助理解最后写代码。

作业总结

接口实战编程完后,测试时遇到蛮多报错,都是自己小失误造成的,比如查询的’WHERE’没有敲空格,导致SQL语句不生效,’ WHERE ‘,这样才对:

  1. // 查询
  2. public function select(string $where = '')
  3. {
  4. $where = empty($where) ? $where : 'WHERE' . $where;
  5. $sql = "SELECT * FROM `users` {$where}";
  6. $stmt = $this->pdo->prepare($sql);
  7. $stmt->execute();
  8. return $stmt->fetchAll(PDO::FETCH_ASSOC);
  9. }

慢慢改,最后解决了。为了辅助自己理解记忆整理了下他们的关系:

1、手写作业

2、MySQLi常见CURD操作

  • 新增操作
  1. <?php
  2. namespace chapter02;
  3. use mysqli;
  4. //一、新增操作
  5. //1.连接数据库
  6. $mysqli = new mysqli('localhost', 'root', 'root', 'phpedu');
  7. //2.执行SQL查询
  8. //准备sql语句
  9. $sql = 'INSERT `users` SET `name`=?, `email`=?, `password`=?, `register_time`=?;';
  10. //使用预处理方式防止sql注入攻击
  11. $stmt = $mysqli->stmt_init();
  12. //创建sql语句对象
  13. $stmt->prepare($sql);
  14. //绑定变量参数
  15. $user = ['admin', 'admin@php.cn', sha1('123456'), time()];
  16. list($name, $email, $password, $register_time) = $user;
  17. $stmt->bind_param('sssi', $name, $email, $password, $register_time);
  18. //执行
  19. $stmt->execute();
  20. //3.处理执行的结果
  21. if ($stmt->affected_rows === 1) :
  22. echo '添加成功,新记录的主键id:' . $stmt->insert_id;
  23. else :
  24. echo '添加失败' . $stmt->error;
  25. endif;
  26. //4.结束操作
  27. //关闭数据库连接
  28. $stmt->close();

  • 更新操作
  1. <?php
  2. namespace chapter02;
  3. use mysqli;
  4. //二、更新操作
  5. //1.连接数据库
  6. $mysqli = new mysqli('localhost', 'root', 'root', 'phpedu');
  7. //2.执行sql查询
  8. //准备sql语句
  9. $sql = 'UPDATE `users` SET `name`=?, `email`=? WHERE `id`=?;';
  10. //使用预处理方式防止sql注入攻击
  11. $stmt = $mysqli->stmt_init();
  12. //创建sql语句对象
  13. $stmt->prepare($sql);
  14. //绑定参数变量
  15. $user = ['jack', 'jack@php.cn', '8'];
  16. list($name, $email, $id) = $user;
  17. $stmt->bind_param('ssi', $name, $email, $id);
  18. //执行
  19. $stmt->execute();
  20. //3.处理执行的结果
  21. if ($stmt->affected_rows === 1 ) :
  22. echo '更新成功';
  23. else :
  24. echo '更新失败';
  25. endif;
  26. //4.结束操作
  27. //关闭数据库
  28. $stmt->close();

  • 删除操作
  1. <?php
  2. namespace chapter02;
  3. use mysqli;
  4. //三、删除操作
  5. //1.连接数据库
  6. $mysqli = new mysqli('localhost', 'root', 'root', 'phpedu');
  7. //2.执行sql查询
  8. //准备sql语句
  9. $sql = 'DELETE FROM `users` WHERE `id`=?;';
  10. //使用预处理方式防止sql注入攻击
  11. $stmt = $mysqli->stmt_init();
  12. //创建sql语句对象
  13. $stmt->prepare($sql);
  14. //绑定参数变量
  15. $id = '8';
  16. $stmt->bind_param('i', $id);
  17. //执行
  18. $stmt->execute();
  19. //3.处理执行结果
  20. if ($stmt->affected_rows === 1) :
  21. echo '删除成功';
  22. else :
  23. echo '删除失败';
  24. endif;
  25. //4.结束操作
  26. //关闭数据库连接
  27. $stmt->close();

  • 查询操作
  1. <?php
  2. namespace chapter02;
  3. use mysqli;
  4. //四、查询操作—使用STMT对象
  5. //1.连接数据库
  6. $mysqli = new mysqli('localhost', 'root', 'root', 'phpedu');
  7. //2.执行SQL查询
  8. //准备sql语句
  9. $sql = 'SELECT `id`,`name`,`email` FROM `users` WHERE `id`>?;';
  10. //使用预处理方式防止sql注入攻击
  11. $stmt = $mysqli->stmt_init();
  12. //创建sql语句对象
  13. $stmt->prepare($sql);
  14. //绑定变量参数
  15. $id = 3;
  16. $stmt->bind_param('i', $id);
  17. //执行
  18. $stmt->execute();
  19. //3.处理执行的结果
  20. //将结果集中的字段/列,绑定到指定的变量上
  21. $stmt->bind_result($id, $name, $email);
  22. //遍历结果集
  23. while ($stmt->fetch()) {
  24. echo "$id : $name ---> $email <br>";
  25. }
  26. //4.结束操作
  27. //释放结果集
  28. $stmt->free_result();
  29. //关闭数据库连接
  30. $stmt->close();

  1. <?php
  2. namespace chapter02;
  3. use mysqli;
  4. //四、查询操作—使用结果集对象
  5. //1.连接数据库
  6. $mysqli = new mysqli('localhost', 'root', 'root', 'phpedu');
  7. //2.执行SQL查询
  8. //准备sql语句
  9. $sql = 'SELECT `id`,`name`,`email` FROM `users` WHERE `id`>?;';
  10. //使用预处理方式防止sql注入攻击
  11. $stmt = $mysqli->stmt_init();
  12. //创建sql语句对象
  13. $stmt->prepare($sql);
  14. //绑定变量参数
  15. $id = 3;
  16. $stmt->bind_param('i', $id);
  17. //执行
  18. $stmt->execute();
  19. //获取到结果集对象
  20. $result = $stmt->get_result();
  21. //3.处理执行的结果
  22. //获取记录,返回关联数组
  23. while ($user = $result->fetch_assoc()) {
  24. echo "{$user['id']} : {$user['name']} ==> {$user['email']} <br>";
  25. }
  26. echo '<hr>';
  27. //数据表指针复位
  28. $result->data_seek(0);
  29. //一次性的获取所有数据
  30. $users = $result->fetch_all(MYSQLI_ASSOC);
  31. foreach ($users as $user) {
  32. echo "{$user['id']} : {$user['name']} ==> {$user['email']} <br>";
  33. }
  34. //4.结束操作
  35. //释放结果集
  36. $stmt->free_result();
  37. //关闭数据库连接
  38. $stmt->close();

3.接口实战

  • 3.1.定义接口
  1. <?php
  2. # 接口实战: 使用PDO/MySQLi实现数据库的多态操作
  3. namespace chapter2;
  4. // 配置数据库的连接参数: 接口常量
  5. interface iDbParam
  6. {
  7. const HOST = 'localhost';
  8. const TYPE = 'mysql';
  9. const DBNAME = 'phpedu';
  10. const USER_NAME = 'root';
  11. const PASSWORD = 'root';
  12. const CHARSET = 'utf8';
  13. const PORT = '3306';
  14. }
  15. // 接口构造方法
  16. interface iDbLink
  17. {
  18. // 接口中允许构造方法
  19. public function __construct(...$linkParams);
  20. }
  21. // 接口方法: 后面的代码就是用下面的这个主接口
  22. // 接口之间允许继承, 而且允许多重继承
  23. interface iCURD extends iDbLink, iDbParam
  24. {
  25. // 新增
  26. public function insert(array $data);
  27. // 查询
  28. public function select(string $where = '');
  29. // 更新
  30. public function update(array $data, string $where);
  31. // 删除
  32. public function delete(string $where);
  33. }
  • 3.2.PDO实现方法
  1. <?php
  2. namespace chapter2;
  3. // 用PDO来实现数据库操作
  4. use PDO;
  5. // 加载iCURD的接口声明
  6. require 'demo7.php';
  7. class Db_PDO implements iCURD
  8. {
  9. // 连接对象
  10. private $pdo = null;
  11. // 实现接口中的构造方法:连接数据库
  12. public function __construct(...$linkParams)
  13. {
  14. list($dsn, $username, $password) = $linkParams;
  15. $this->pdo = new PDO($dsn, $username, $password);
  16. }
  17. // 新增
  18. public function insert(array $data)
  19. {
  20. $sql = "INSERT `users` SET `name`=?, `email`=?,`password`=?,`register_time`=?";
  21. $stmt = $this->pdo->prepare($sql);
  22. $stmt->execute($data);
  23. return $stmt->rowCount() === 1 ? '新增成功' : '新增失败';
  24. }
  25. // 查询
  26. public function select(string $where = '')
  27. {
  28. $where = empty($where) ? $where : ' WHERE ' . $where;
  29. $sql = "SELECT * FROM `users` {$where}";
  30. $stmt = $this->pdo->prepare($sql);
  31. $stmt->execute();
  32. return $stmt->fetchAll(PDO::FETCH_ASSOC);
  33. }
  34. // 更新
  35. public function update(array $data, string $where)
  36. {
  37. // 设置更新参数
  38. $params = '';
  39. foreach ($data as $key => $value) {
  40. $params .= "`{$key}` = '{$value}', ";
  41. }
  42. // 将最后的", "去掉
  43. $params = rtrim($params, ', ');
  44. // 执行更新
  45. $sql = "UPDATE `users` SET {$params} WHERE {$where}";
  46. $stmt = $this->pdo->prepare($sql);
  47. $stmt->execute();
  48. return $stmt->rowCount() === 1 ? '更新成功' : '更新失败';
  49. }
  50. // 删除
  51. public function delete(string $where)
  52. {
  53. $sql = "DELETE FROM `users` WHERE {$where}";
  54. $stmt = $this->pdo->prepare($sql);
  55. $stmt->execute();
  56. return $stmt->rowCount() === 1 ? '删除成功' : '删除失败';
  57. }
  58. }
  • 3.3.MySQLi实现方法
  1. <?php
  2. namespace chapter2;
  3. // 用MySQLi来实现数据库操作
  4. use mysqli;
  5. // 加载iCURD的接口声明
  6. require 'demo7.php';
  7. class Db_MySQLi implements iCURD
  8. {
  9. // 连接对象
  10. private $mysqli = null;
  11. // 实现接口中的构造方法:连接数据库
  12. public function __construct(...$linkParams)
  13. {
  14. list($host, $username, $password, $dbname) = $linkParams;
  15. $this->mysqli = new mysqli($host, $username, $password, $dbname);
  16. // 设置默认字符集
  17. $this->mysqli -> set_charset('utf8');
  18. }
  19. // 新增
  20. public function insert(array $data)
  21. {
  22. $sql = "INSERT `users` SET `name`=?, `email`=?,`password`=?,`register_time`=?";
  23. $stmt = $this->mysqli->prepare($sql);
  24. $stmt->bind_param('sssi', $name, $email, $password, $register_time);
  25. list($name, $email, $password, $register_time) = $data;
  26. $stmt->execute();
  27. return $stmt->affected_rows === 1 ? '新增成功' : '新增失败';
  28. }
  29. // 查询
  30. public function select(string $where = '')
  31. {
  32. $where = empty($where) ? $where : ' WHERE ' . $where;
  33. $sql = "SELECT * FROM `users` {$where}";
  34. $stmt = $this->mysqli->prepare($sql);
  35. $stmt->execute();
  36. return $stmt->get_result();
  37. }
  38. // 更新
  39. public function update(array $data, string $where)
  40. {
  41. // 设置更新参数
  42. $params = '';
  43. foreach ($data as $key => $value) {
  44. $params .= "`{$key}` = '{$value}', ";
  45. }
  46. // 将最后的", "去掉
  47. $params = rtrim($params, ', ');
  48. // 执行更新
  49. $sql = "UPDATE `users` SET {$params} WHERE {$where}";
  50. $stmt = $this->mysqli->prepare($sql);
  51. $stmt->execute();
  52. return $stmt->affected_rows === 1 ? '更新成功' : '更新失败';
  53. }
  54. // 删除
  55. public function delete(string $where)
  56. {
  57. $sql = "DELETE FROM `users` WHERE {$where}";
  58. $stmt = $this->mysqli->prepare($sql);
  59. $stmt->execute();
  60. return $stmt->affected_rows === 1 ? '删除成功' : '删除失败';
  61. }
  62. }
  • 3.4.通用类DB
  1. <?php
  2. namespace chapter2;
  3. // 通用类: 数据库操作,面向接口实现多态, 动态的支持PDO, MySQLi
  4. use chapter2\iCURD;
  5. class DB
  6. {
  7. // 新增
  8. public static function insert(iCURD $db, array $data)
  9. {
  10. return $db->insert($data);
  11. }
  12. // 查询
  13. public static function select(iCURD $db, string $where = '')
  14. {
  15. return $db->select($where);
  16. }
  17. // 更新
  18. public static function update(iCURD $db, array $data, string $where= '')
  19. {
  20. return $db->update($data, $where);
  21. }
  22. // 删除
  23. public static function delete(iCURD $db, string $where= '')
  24. {
  25. return $db->delete($where);
  26. }
  27. }
  • 3.5.PDO实现数据库操作
  1. <?php
  2. namespace chapter02;
  3. //使用PDO来操作数据库:接口实现
  4. // 加载PDO操作类: Db_PDO
  5. require 'demo8.php';
  6. //加载数据库的通用类
  7. require 'demo10.php';
  8. //先创建DSN
  9. $dsn = iDbParam::TYPE . ':host=' . iDbParam::HOST . ';dbname=' . iDbParam::DBNAME . ';charset=' . iDbParam::CAHRSET;
  10. $link = new Db_PDO($dsn, iDbParam::USER_NAME, iDbParam::PASSWORD);
  11. //var_dump($link);
  12. //var_dump($dsn);
  13. //测试新增操作
  14. echo DB::insert($link, ['欧阳峰', 'rose@php.cn', sha1('123456'), time()]);
  15. echo '<hr>';
  16. //
  17. //测试查询
  18. foreach (DB::select($link,'id > 2') as $user) {
  19. echo "{$user['id']} -- {$user['name']} -- {$user['email']} <br>";
  20. }
  21. echo '<hr>';
  22. //测试更新
  23. echo DB::update($link, ['id'=>'9', 'email'=>'ouyang@php.cn'], 'id=26');
  24. echo '<hr>';
  25. //测试删除
  26. echo DB::delete($link, 'id=8');

  • 3.6.MySQLi实现数据库操作
  1. <?php
  2. namespace chapter02;
  3. //使用MySQLi来操作数据库:接口实现
  4. // 加载MySQLi操作类: Db_MySQLi
  5. require 'demo9.php';
  6. //加载数据库的通用类
  7. require 'demo10.php';
  8. //连接实例
  9. $link = new Db_MySQLi(iDbParam::HOST, iDbParam::USER_NAME, iDbParam::PASSWORD, iDbParam::DBNAME);
  10. //var_dump($link);
  11. //var_dump($dsn);
  12. //测试新增操作
  13. echo DB::insert($link, ['丘处机', 'rose@php.cn', sha1('123456'), time()]);
  14. echo '<hr>';
  15. //测试查询
  16. foreach (DB::select($link,'id > 3') as $user) {
  17. echo "{$user['id']} -- {$user['name']} -- {$user['email']} <br>";
  18. }
  19. echo '<hr>';
  20. ////测试更新
  21. echo DB::update($link, ['name'=>'郭芙蓉', 'email'=>'guofurong@php.cn'], 'id=3');
  22. //echo DB::update($link, ['id'=>'8'], 'id=9');
  23. echo '<hr>';
  24. //测试删除
  25. echo DB::delete($link, 'id=2');

Correcting teacher:天蓬老师天蓬老师

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