博客列表 >2.11号作业MYSQLI

2.11号作业MYSQLI

-   迷舍人
- 迷舍人原创
2020年02月13日 22:15:19658浏览

新增操作

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