博客列表 >Mysqli和PDO操作数据库总结-7月20日作业

Mysqli和PDO操作数据库总结-7月20日作业

知行合一
知行合一原创
2020年08月16日 17:31:15801浏览

Mysqli操作数据库

1.数据库配置

第一种方式
直接在写在创建Mysql对象中。这不建议用。建议写在一个配置文件中

  1. //建立到Mysql的链接
  2. $mysqli= new mysqli('127.0.0.1','root','123456','zl.com');

第二种方式:新建config.php文件

  1. return[
  2. 'type'=>$type??'mysqli',
  3. 'host'=>$host??'localhost',
  4. 'port'=>$port??'3306',
  5. 'dbname'=>$dbname??'phpcnyizhi',
  6. 'dbuser'=>$dbuser??'phpcnyizhi',
  7. 'dbpwd'=>$dbpwd??'phpcnyizhi',
  8. 'charset'=>$charset??'utf8'
  9. ];

2.连接数据库,创建一个connext.php文件。

使用上面第二种方式连接

  1. //引入配置文件,得到一个关联数组
  2. $config=require (__DIR__.'/../config.php');
  3. //数组拆分为变量
  4. extract($config);
  5. //创建Mysqli对象
  6. $mysqli= new mysqli($host,$dbuser,$dbpwd,$dbname);
  7. //无法链接时,输出错误信息
  8. //connect_errno 返回最后一次连接数据库的错误代码
  9. //connect_error回最后一次连接数据库的错误描述,为字符串
  10. if($mysqli->connect_errno){
  11. die("CONNECT_ERROR:".$mysqli->connect_error);
  12. }
  13. //设置默认的客户端字符集
  14. $mysqli->set_charset('utf-8');

3.插入新数据

  1. //引入通用文件
  2. require ('connect.php');
  3. $sql="INSERT `yizhi_user` SET `username`=?,`password`=?,`cid`=?";
  4. $stmt=$mysqli->prepare($sql);
  5. $stmt->bind_param('ssi',$username,$password,$cid);
  6. / 插入方式一:直接给绑定的变量赋值
  7. // $username='王五1';
  8. // $password=md5('123456');
  9. // $cid=1;
  10. // 插入方式二:数组的形式
  11. $data=[
  12. 'username'=>'赵六',
  13. 'password'=>md5('123456'),
  14. 'cid'=>1
  15. ];
  16. extract($data);
  17. $res=$stmt->execute();
  18. if($res){
  19. printf("新增加了%s条纪录,插入的纪录ID是%d,<br>",$stmt->affected_rows,$stmt->insert_id);
  20. }
  21. // 关闭
  22. $mysqli->close()

4.删除数据,只是SQL语句发生了变化

  1. require ('connect.php');
  2. $sql="DELETE FROM `yizhi_user` WHERE `id`=?";
  3. $stmt=$mysqli->prepare($sql);
  4. $stmt->bind_param('i',$id);
  5. $id=14;
  6. if($stmt->execute()){
  7. printf("删除了%s条纪录,<br>",$stmt->affected_rows);
  8. }else
  9. {
  10. exit(printf("操作失败,失败编号d%,失败错误信息s%",$stmt->errno,$stmt->error));
  11. };
  12. $mysqli->close();

5.更新数据

  1. require ('connect.php');
  2. $sql="UPDATE `yizhi_user` SET `username`=?,`password`=?,`cid`=? WHERE `id`>?";
  3. $stmt=$mysqli->prepare($sql);
  4. $stmt->bind_param('ssii',$username,$password,$cid,$id);
  5. //用关联数组形式
  6. $data=[
  7. 'username'=>'赵六u',
  8. 'password'=>md5('123456'),
  9. 'cid'=>1,
  10. 'id'=>10
  11. ];
  12. extract($data);
  13. if($stmt->execute()){
  14. printf("更新了%s条纪录,<br>",$stmt->affected_rows);
  15. }else
  16. {
  17. exit(printf("操作失败,失败编号d%,失败错误信息s%",$stmt->errno,$stmt->error));
  18. };
  19. $mysqli->close();

6.1查询数据方式一

  1. //1.连接
  2. require ('connect.php');
  3. //2.查询
  4. $sql="SELECT * FROM `yizhi_user` WHERE `id`>?";
  5. $stmt=$mysqli->prepare($sql);
  6. $id=10;
  7. $stmt->bind_param('i',$id);
  8. $stmt->execute() or die($stmt->error);
  9. //获取结果集
  10. $res=$stmt->get_result();
  11. if($res->num_rows===0){
  12. exit("结果为空");
  13. }
  14. //以关联数组形式返回一条纪录
  15. // print_r ($res->fetch_assoc());
  16. //循环输出结果集 第一种循环方式
  17. while($user=$res->fetch_assoc()){
  18. vprintf("id:%d|名字:%s|密码:%s|cid:%d<br>",$user);
  19. }
  20. echo "共有{$res->num_rows}条纪录";
  21. //释放结果集
  22. $res->free();
  23. //关闭
  24. $mysqli->close();

6.2查询数据方式二

  1. //fetch_all以二维关联数组方式返回。参数值 关联数组MYSQLI_ASSOC,数值索引数组MYSQLI_NUM,或者两者皆有MYSQLI_BOTH的方式
  2. $users=$res->fetch_all(MYSQLI_ASSOC);//默认是MYSQLI_NUM
  3. foreach($users as $user){
  4. vprintf("id:%d|名字:%s|密码:%s|cid:%d<br>",$user);
  5. }

6.3查询数据方式三

  1. //1.连接
  2. require ('connect.php');
  3. //2.查询
  4. $sql="SELECT `username`,`password`,'cid' FROM `yizhi_user` WHERE `id`>?";
  5. $stmt=$mysqli->prepare($sql);
  6. $id=10;
  7. $stmt->bind_param('i',$id);
  8. $stmt->execute() or die($stmt->error);
  9. //3.字段与变量绑定
  10. $stmt->bind_result($username,$password,$cid);
  11. //因为当前操作不涉及结果集对象,如果要获取结果集中的数量,用以下两行代码
  12. $stmt->store_result();
  13. if($stmt->num_rows===0)exit("没有内容");
  14. while($stmt->fetch()){
  15. printf("名字:%s|密码:%s|cid:%d<br>",$username,$password,$cid);
  16. }
  17. //4.关闭
  18. $mysqli->close();

PDO操作数据库

连接数据库文件connect.php

  1. //导出数据库配置,就是一个关联数组
  2. $config=require (__DIR__.'/../config.php');
  3. extract($config); //数组拆分为变量
  4. //1创建PDO对象
  5. //$dsn数据源名称
  6. //$dsn="mysql:host=localhost;dbname=phpcnyizhi;charset=utf8;port=3306"
  7. try{
  8. $dsn=sprintf('%s:host=%s;dbname=%s;charset=%s;port=%s',$type,$host,$dbname,$charset,$port);
  9. $pdo= new pdo($dsn,$dbuser,$dbpwd);
  10. //设置纪录集的默认获取方式,只关心关联数组部分
  11. $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
  12. }
  13. //捕捉特定于数据库信息的PDOException异常
  14. catch(PDOException $e){
  15. echo $e->getMessage();
  16. }
  17. //捕捉拥有Throwable接口的错误或者其它异常
  18. catch(Throwable $e){
  19. echo $e->getMessage();
  20. }

插入数据第一种方式

  1. require ('connect.php');
  2. $sql="INSERT `yizhi_user` SET `username`=?,`password`=?,`cid`=?";
  3. $stmt=$pdo->prepare($sql);
  4. $stmt->bindParam(1,$username,PDO::PARAM_STR,30);
  5. $stmt->bindParam(2,$password,PDO::PARAM_STR,100);
  6. $stmt->bindParam(3,$cid,PDO::PARAM_STR,50);
  7. $username="张飞";
  8. $password=md5('123456');
  9. $cid=1;
  10. $stmt->execute();
  11. if($stmt->rowCount() > 0){
  12. echo "新增成功".$stmt->rowCount()."条纪录,主键ID".$pdo->lastInsertId();
  13. }
  14. else{
  15. exit("失败");
  16. }
  17. //关闭
  18. //$pdo=null;
  19. unset($pdo);

插入数据第二种方式

  1. require ('connect.php');
  2. $sql="INSERT `yizhi_user` SET `username`=?,`password`=?,`cid`=?";
  3. $stmt=$pdo->prepare($sql);
  4. //值绑定,直接给execute传参来实现
  5. $stmt->execute(['关羽',md5('123456'),1]);
  6. if($stmt->rowCount() > 0){
  7. echo "新增成功".$stmt->rowCount()."条纪录,主键ID".$pdo->lastInsertId();
  8. }
  9. else{
  10. exit("失败");
  11. }
  12. //关闭
  13. //$pdo=null;
  14. unset($pdo);

更新数据

  1. require ('connect.php');
  2. $sql="UPDATE `yizhi_user` SET `cid`=? WHERE id>?";
  3. $stmt=$pdo->prepare($sql);
  4. $stmt->execute([5,15]);
  5. if($stmt->rowCount() > 0){
  6. echo "更新".$stmt->rowCount()."条纪录";
  7. }
  8. else{
  9. exit("失败");
  10. }
  11. //关闭
  12. //$pdo=null;
  13. unset($pdo);

删除数据

  1. require ('connect.php');
  2. $sql="DELETE FROM `yizhi_user` WHERE id>?";
  3. $stmt=$pdo->prepare($sql);
  4. $stmt->execute([25]);
  5. if($stmt->rowCount() > 0){
  6. echo "删除".$stmt->rowCount()."条纪录";
  7. }
  8. else{
  9. exit("失败");
  10. }
  11. //关闭
  12. //$pdo=null;
  13. unset($pdo);

查询数据方式一 while+fetch

  1. //1.连接
  2. require ('connect.php');
  3. //2.查询
  4. $sql="SELECT * FROM `yizhi_user` WHERE `id`>?";
  5. $stmt=$pdo->prepare($sql);
  6. $stmt->execute([15]);
  7. // print_r ($stmt->fetch());
  8. // print_r ($stmt->fetch());
  9. // print_r ($stmt->fetch());
  10. //循环输出结果集 第一种循环方式
  11. while($user=$stmt->fetch()){
  12. vprintf("id:%d|名字:%s|密码:%s|cid:%d<br>",$user);
  13. }
  14. //关闭
  15. //$pdo=null;
  16. unset($pdo);

查询数据方式二fetchall+foreach

  1. require ('connect.php');
  2. //2.查询
  3. $sql="SELECT * FROM `yizhi_user` WHERE `id`>?";
  4. $stmt=$pdo->prepare($sql);
  5. $stmt->execute([10]);
  6. $users=$stmt->fetchall();//默认是MYSQLI_NUM
  7. foreach($users as $user){
  8. vprintf("id:%d|名字:%s|密码:%s|cid:%d<br>",$user);
  9. }
  10. //关闭
  11. //$pdo=null;
  12. unset($pdo);

查询数据方式三

  1. require ('connect.php');
  2. //2.查询
  3. $sql="SELECT * FROM `yizhi_user` WHERE `id`>?";
  4. $stmt=$pdo->prepare($sql);
  5. $stmt->execute([5]) or die($stmt->error);
  6. //3.字段与变量绑定
  7. $stmt->bindColumn('username',$username);
  8. $stmt->bindColumn('password',$password);
  9. //PDO::FETCH_BOUND 以布尔值的形式返回结果,同时将获取的列值赋给bindParam()方法中指定的变量。
  10. while($stmt->fetch(PDO::FETCH_BOUND)){
  11. printf("名字:%s|密码:%s<br>",$username,$password);
  12. }
  13. //获取影响的纪录数
  14. $sql="SELECT COUNT(`id`) AS `count` FROM `yizhi_user` WHERE id>?";
  15. $stmt=$pdo->prepare($sql);
  16. $stmt->execute([5]) or die($stmt->error);
  17. $stmt->bindColumn('count',$count);
  18. $stmt->fetch(PDO::FETCH_BOUND);
  19. echo "查询到{$count}条数据";
  20. //关闭
  21. //$pdo=null;
  22. unset($pdo);

操作数据库总结

1.基本步骤

序号 步骤 描述
1 连接数据库 使用Mysqli或PDO连接
2 操作数据库 sql语句新增、更新、删除、查询
3 获取以及释放结果集 仅针对查询操作有效,清空查询结果的过程。其它无效
4 关闭数据库链接 销毁数据库连接对象
  • 写操作(INSERT/UPDATE/DELETE): 返回受影响的记录数量(整数)
  • 读操作(SELECT/DESC…): 返回查询结果集(二维关联数组)

    2.连接参数

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

3.1 mysqli

3.1.1 mysqli对象

序号 属性/方法 描述
1 connect_errno 连接错误编码
2 connect_error 连接错误信息
3 set_charset 设置字符集
4 prepare 创建mysqli_stmt对象

3.1.1 mysqli_stmt对象

序号 属性/方法 描述
1 bind_param() 占位符与变量绑定
2 bind_result() 字段与变量绑定
3 execute() 执行 SQL 语句
4 get_result() 创建mysqli_result 对象
5 fetch() 遍历变量中的字段
6 close() 关闭预处理查询
7 affected_rows 受影响记录数量
8 insert_id 新增记录主键 id
9 errno 错误编号
10 error 错误信息

3.1.2 mysqli_result对象

序号 属性/方法 描述
1 fetch_assoc() 以关联数组返回一条记录
2 fetch_all() 获取全部记录
3 num_rows 结果集记录数量
4 free() 释放结果集

3.2PDO

3.2.1PDO对象

序号 属性/方法 描述
1 setAttribute() 设置属性
2 lastInsertId() 最后插入记录的主键 id
3 prepare() 创建PDOStatement对象

3.2.2PDOStatement对象

序号 属性/方法 描述
1 execute() 执行预处理语句,也可以传参,用于值绑定
2 fetchAll() 获取结果集,通常会传参数 PDO::FETCH_ASSOC 得到一个二维关联数组
3 fetch() 从结果集中获取下一行,通常会传参 PDO::FETCH_ASSOC 得到关联数组
4 bindColumn() 绑定每个字段到对应的变量
5 rowCount() 受影响的行数
6 bindParam() 绑定占位符与变量名
7 bindValue() 绑定占位符与值

总结

跟着学习,难度不大,关键要自己练习,才能记忆下来。做好笔记,忘记时看看,时常温习!

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