Blogger Information
Blog 18
fans 0
comment 0
visits 10863
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
2.11号作业MYSQLI
- 迷舍人
Original
661 people have browsed it

新增操作

  1. <?php
  2. namespace chapter2;
  3. use mysqli;
  4. // mysqli面向对象操作数据库
  5. // 新增操作
  6. // 1.链接数据库
  7. // mysql(主机名,用户名,密码,默认数据库);
  8. $mysqli = new mysqli('localhost','root','root','phpedu');
  9. // 2.执行sql语句
  10. $sql = "INSERT `users` SET `name`=?, `email`=?, `password`=?, `register_time`=?";
  11. // 使用的是预处理方式,防止sql注入
  12. $stmt = $mysqli->stmt_init();
  13. // 创建sql语句对象
  14. $stmt->prepare($sql);
  15. // $stmt->bind_param('参数类型',参数列表....);
  16. $user = ['admin','admin@qq.cn',sha1('123456'),time()];
  17. list($name,$email,$password,$register_time) = $user;
  18. $stmt->bind_param('sssi',$name,$email,$password,$register_time);
  19. //执行
  20. $stmt->execute();
  21. // 3.处理执行结果
  22. if($stmt->affected_rows === 1){
  23. echo '添加成功,新记录的主键ID:'.$stmt->insert_id;
  24. }else{
  25. echo '添加失败'.$stmt->error;
  26. }
  27. // 4.结束操作
  28. $stmt->close();

更新操作

  1. <?php
  2. namespace chapter2;
  3. use mysqli;
  4. // mysqli面向对象操作数据库
  5. // 更新操作
  6. // 1.链接数据库
  7. // mysql(主机名,用户名,密码,默认数据库);
  8. $mysqli = new mysqli('localhost','root','root','phpedu');
  9. // 2.执行sql语句
  10. $sql = "UPDATE `users` SET `name`=?, `email`=? where `id`=? ";
  11. // 使用的是预处理方式,防止sql注入
  12. $stmt = $mysqli->stmt_init();
  13. // 创建sql语句对象
  14. $stmt->prepare($sql);
  15. // $stmt->bind_param('参数类型',参数列表....);
  16. $user = ['admin888','admin@qq.cn',8];
  17. list($name,$email,$id) = $user;
  18. $stmt->bind_param('ssi',$name,$email,$id);
  19. //执行
  20. $stmt->execute();
  21. // 3.处理执行结果
  22. if($stmt->affected_rows === 1){
  23. echo '修改成功';
  24. }else{
  25. echo '修改失败'.$stmt->error;
  26. }
  27. // 4.结束操作
  28. $stmt->close();

删除操作

  1. <?php
  2. namespace chapter2;
  3. use mysqli;
  4. // mysqli面向对象操作数据库
  5. // 删除操作
  6. // 1.链接数据库
  7. // mysql(主机名,用户名,密码,默认数据库);
  8. $mysqli = new mysqli('localhost','root','root','phpedu');
  9. // 2.执行sql语句
  10. $sql = "DELETE from `users` where `id`=? ";
  11. // 使用的是预处理方式,防止sql注入
  12. $stmt = $mysqli->stmt_init();
  13. // 创建sql语句对象
  14. $stmt->prepare($sql);
  15. // $stmt->bind_param('参数类型',参数列表....);
  16. $id = 8;
  17. $stmt->bind_param('i',$id);
  18. //执行
  19. $stmt->execute();
  20. // 3.处理执行结果
  21. if($stmt->affected_rows === 1){
  22. echo '删除成功';
  23. }else{
  24. echo '删除失败'.$stmt->error;
  25. }
  26. // 4.结束操作
  27. $stmt->close();

stmt对象查询

  1. <?php
  2. namespace chapter2;
  3. use mysqli;
  4. // mysqli面向对象操作数据库
  5. // 查询1.使用stmt对象
  6. // 1.链接数据库
  7. // mysql(主机名,用户名,密码,默认数据库);
  8. $mysqli = new mysqli('localhost','root','root','phpedu');
  9. // 2.执行sql语句
  10. $sql = "SELECT `id`,`name`,`email` from `users` where `id`>? ";
  11. // 使用的是预处理方式,防止sql注入
  12. $stmt = $mysqli->stmt_init();
  13. // 创建sql语句对象
  14. $stmt->prepare($sql);
  15. // $stmt->bind_param('参数类型',参数列表....);
  16. $id = 2;
  17. $stmt->bind_param('i',$id);
  18. //执行
  19. $stmt->execute();
  20. // 3.处理执行结果
  21. // bind_result():将结果集中的字段|列,绑定到指定的变量上
  22. $stmt->bind_result($id,$name,$email);
  23. // 遍历结果集 fetch():获取当前的记录,并将记录指针自动移到下一条记录
  24. while($stmt->fetch()){
  25. echo "$id:$name ---> $email <br>";
  26. }
  27. // 4.结束操作
  28. // 释放结果集
  29. $stmt->free_result();
  30. // 关闭数据库链接
  31. $stmt->close();

结果集查询

  1. <?php
  2. namespace chapter2;
  3. use mysqli;
  4. // mysqli面向对象操作数据库
  5. // 查询2.使用结果集对象
  6. // 1.链接数据库
  7. // mysql(主机名,用户名,密码,默认数据库);
  8. $mysqli = new mysqli('localhost','root','root','phpedu');
  9. // 2.执行sql语句
  10. $sql = "SELECT `id`,`name`,`email` from `users` where `id`>? ";
  11. // 使用的是预处理方式,防止sql注入
  12. $stmt = $mysqli->stmt_init();
  13. // 创建sql语句对象
  14. $stmt->prepare($sql);
  15. // $stmt->bind_param('参数类型',参数列表....);
  16. $id = 4;
  17. $stmt->bind_param('i',$id);
  18. //执行
  19. $stmt->execute();
  20. // 获取到结果集对象
  21. $result = $stmt->get_result();
  22. // var_dump($result);
  23. // 3.处理执行结果
  24. // 获取一条数据,返回:索引+关联
  25. // $user = $result->fetch_array();
  26. // 获取一条数据,返回:索引
  27. // $user = $result->fetch_row();
  28. // 获取一条数据,返回:关联
  29. // $user = $result->fetch_assoc();
  30. while($user = $result->fetch_assoc()){
  31. echo "{$user['id']} : {$user['name']} ===> {$user['email']} <br>";
  32. }
  33. echo '<hr>';
  34. // 数据表指针复位 归零
  35. $result->data_seek(0);
  36. // 一次性获取到所有记录 $result->fetch_all()
  37. $users = $result->fetch_all(MYSQLI_ASSOC);
  38. // print_r($users);
  39. foreach($users as $user2){
  40. echo "{$user2['id']} : {$user2['name']} ===> {$user2['email']} <br>";
  41. }
  42. // 4.结束操作
  43. // 释放结果集
  44. $result->free_result();
  45. // 关闭数据库链接
  46. $stmt->close();

手写

PDO为例多态

代码部分

  1. <?php
  2. # 接口实战: 使用PDO/MySQLi实现数据库的多态操作
  3. namespace chapter3;
  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. }
  1. <?php
  2. namespace chapter3;
  3. // 用PDO来实现数据库操作
  4. use PDO;
  5. // 加载iCURD的接口声明
  6. require 'demo2.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. }

通用类

  1. <?php
  2. namespace chapter3;
  3. // 通用类: 数据库操作,面向接口实现多态, 动态的支持PDO, MySQLi
  4. use chapter3\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. }

pdo操作 接口实现

  1. <?php
  2. namespace chapter3;
  3. // 使用PDO来操作数据库: 接口实现
  4. // 加载PDO操作类: DB_pdo
  5. require 'demo3.php';
  6. // 加载数据库的通用类
  7. require 'demo5.php';
  8. // 先创建DSN
  9. $dsn = iDbParam::TYPE . ':host='.iDbParam::HOST . ';dbname=' . iDbParam::DBNAME . ';charset='.iDbParam::CHARSET;
  10. $link = new DB_pdo($dsn, iDbParam::USER_NAME, iDbParam::PASSWORD);
  11. // // 测试新增操作
  12. echo DB::insert($link, ['郭靖', 'gunjin@php.cn', sha1('123456'), time()]);
  13. // 测试查询
  14. // foreach (DB::select($link, 'id > 2') as $user) {
  15. // echo "{$user['id']} -- {$user['name']} -- {$user['email']} <br>";
  16. // }
  17. // 更新测试
  18. // echo DB::update($link, ['name'=>'朱老师', 'email'=>'zhulaoshi@php.cn'], 'id=10');
  19. // 删除操作
  20. // echo DB::delete($link,'id=10');
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
Author's latest blog post