博客列表 >MYSQLI与PDO连接数据库与操作

MYSQLI与PDO连接数据库与操作

零龙
零龙原创
2020年07月30日 04:30:38880浏览

MYSQLI与PDO连接数据库与操作

1.基本操作

序号 顺序 描述
1 连接数据库 连接数据库可以通过MYSQLI与PDO两种对象进行连接
2 操作数据库 连接完成后对数据库INSERT、DELECT、UPDATE、SELECT(增删改查)
3 释放结果集 对数据库操作完成后释放结果集:MYSQLI使用free()
4 关闭数据库 操作完成关闭数据库CLOSE()、PDO使用NULL

1、 连接数据库

  • 建立config.php文件返回字符集、使用connect.php文件连接数据库。

1.config.php文件说明

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

示例

  1. <?php
  2. // 连接数据库参数
  3. return[
  4. 'type' => $type ?? 'mysql', //数据库类型
  5. 'host' => $host ?? 'localhost',//数据库连接地址
  6. 'charset'=>$type ?? 'utf8', //数据库字符集
  7. 'dbname' =>$type ?? 'mysqli', //数据库名称
  8. 'username' => $type ?? 'root', //连接数据库用户名
  9. 'password' => $type ?? '142536',//连接数据库密码
  10. 'port' => $type ?? '3306' //数据库端口号
  11. ];

2.connect.php文件说明

  • 2-1 mysqli 连接说明

    使用require 调用config.php,将连接参数转换后设定DSN。
    示例
  1. <?php
  2. $config = require __DIR__ ."/../config.php"; //设定一个变量接收config.php的数据库连接参数
  3. extract($config); // 关联数组转换独立变量
  4. $mysqli = new mysqli($host,$username,$password,$dbname,$port);
  5. //连接数据库需要:
  6. //数据库地址$host 连接地址必须在首位
  7. //数据库用户名和密码:$usrname,$password
  8. //数据库名:$dbname
  9. //数据库端口号:$port(可选)
  10. if($mysqli->connect_errno) echo '连接错误:'.$mysqli->connect_error;
  11. //数据库连接错误,显示错误信息
  12. $mysqli->set_charset("utf-8");
  • 2-2 PDO 连接说明

    使用require 调用config.php,将连接参数转换后设定DSN。
    示例
  1. <?php
  2. $config = require __DIR__ .'/../config.php';
  3. extract($config);
  4. //$dsn ='mysql:host=localhost;dbname=mysqli;charset=utf8;port=3306';
  5. //处理连接错误
  6. try{ $dsn=sprintf('%s:host=%s;dbname=%s;charset=%s;port=%s',$type,$host,$dbname,$charset,$port);
  7. $pdo = new PDO($dsn,$username,$password);
  8. $pdo->setAttribute(PDO::FETCH_ASSOC,PDO::ATTR_DEFAULT_FETCH_MODE);
  9. //设置pdo属性PDO::FETCH_ASSOC结果集列名的数组,
  10. //PDO::ATTR_DEFAULT_FETCH_MODE设置默认的提取模式
  11. }catCh(PDOException $e)
  12. {
  13. exit("连接错误:".$e->getMessage());
  14. //$e->getMessage()获取错误信息
  15. }

2-3 MYSQLI 面向对象与预处理

常用的接口与属性方法。

2-3-1 MYSQLi 接口

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

2-3-2 MYSQLi->stmt 接口

序号 属性/方法 描述
1 bind_param() 占位符与变量绑定
2 bind_result() 字段与变量绑定
3 execute() 执行SQL语句
4 get_result() 创建’mysqli->rseult’对象
5 fetch() 遍历变量中的字段
6 close() 关闭数据库连接
7 affected_row 受影响记录数量
8 insert_id 受影响主键ID
9 error 错误信息
10 reeon 错误编码
11 store->result() 记录集回传

2-3-2 MYSQLi->result 接口

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

2-4 PDO 面向对象与预处理

常用的接口与属性方法。

2-4-1 PDO接口

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

2-4-2 PDOStatement 接口

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

2、 INSERT连接数添加

  • 1.mysqli对数据库的添加:

    • 调用connect.php文件。
    • 编写sql添加语句$sql =’INSERT 表名 SET 表内容=?..;
    • 使用?防SQL注入。
    • 使用prepare(),执行等待SQL操作。
    • 创建$mysqli->prepare()对象
    • 使用bindparm()占位符绑定变量
    • 使用数组然后将数组的值赋给变量,添加到数据库。
    • 使用executc(),添加到数据库
      示例
      1. <?php
      2. require "connect.php";
      3. $sql ='INSERT `user` SET `username`=?,`password`=?,`sex`=?,`age`=?,`email`=?,`mobile`=?;';
      4. $stmt = $mysqli->prepare($sql);
      5. //创建mysql_stmt对象
      6. $stmt->bind_param('sssiss',$username,$password,$sex,$age,$email,$mobile);
      7. //使用bind_param占位符绑定变量
      8. $data = [
      9. 'username'=>'嫦娥',
      10. 'password'=> sha1('8888'),
      11. 'age'=> 98,
      12. 'sex'=>'女',
      13. 'email'=> 'ce@163.com',
      14. 'mobile'=> '15687874598',
      15. ];
      16. //设定一个$data数组、将数值拆分为变量
      17. extract($data);
      18. //执行SQL
      19. $stmt->execute() or die($stmt->error);
      20. printf('您成功添加了%s条数据,主键ID是:%d',$stmt->affected_rows,$stmt->insert_id);
      21. $mysqli->close();
      22. //insert 重点:bind_param 设定占位符绑定变量,s代表字符串,i代表整数更多占位符查手册
      23. //execute() 执行SQL
      24. //affected_rows 返回执行成功的记录集
      25. //insert_id 返回执行成功的行号
  • 2.PDO对数据库的添加:

    • 调用connect.php文件。
    • 编写sql添加语句$sql =’INSERT 表名 SET 表标题=?..;
    • 使用?防SQL注入。
    • 使用prepare(),执行等待SQL操作。
    • 创建$mysqli->prepare()对象
    • 对需要添加的数据赋值,添加到数据库。
    • 使用executc(),添加到数据库
  1. <?php
  2. require'connect.php';
  3. $sql ="INSERT `user` SET `username`=?,`password`=?,`age`=?,`sex`=?,`email`=?,`mobile`=? ";
  4. $stmt = $pdo->prepare($sql);
  5. $username ='赤脚大仙';
  6. $sex ='男';
  7. $password =sha1('66666');
  8. $email ='cjdx@163.com';
  9. $mobile = '13745455656';
  10. $age = 388;
  11. $stmt->execute([$username,$password,$sex,$age,$mobile,$email]);
  12. if($stmt->rowCount()>0) exit('添加成功'.$stmt->rowCount().'条数据,主键ID:'.$pdo->lastInsertId());
  13. unset($pdo);
  14. //重点:execute();执行SQL,将变量写入数据库。
  15. //$stmt->rowCount() 如果SQL执行成功那就有值

3、 UPDATE连接数更新

  • 1.mysqli对数据库的更新:
    • 调用connect.php文件。
    • 编写sql更新语句$sql =’UPDATE 数据表 SET 标题=?… WHRER 标题=;
    • 使用?防SQL注入。
    • 使用prepare(),执行等待SQL操作。
    • 创建$mysqli->prepare()对象
    • 使用bindparm()占位符绑定变量
    • 使用数组然后将数组的值赋给变量,更新到数据库。
    • exeract()对数组的值转变量。
    • 使用executc(),添加到数据库
      示例
  1. require "connect.php";
  2. $sql = 'UPDATE `user` SET `username`=?,`password`=?,`sex`=?,`age`=?,`email`=?,`mobile`=? WHERE `Id`=?;';
  3. $stmt = $mysqli->prepare($sql);
  4. $stmt->bind_param('sssissi',$username,$password,$sex,$age,$email,$mobile,$id);
  5. $data = [
  6. 'id'=> 317,
  7. 'username'=>'嫦娥',
  8. 'password'=> sha1('7777'),
  9. 'age'=> 78,
  10. 'sex'=>'女',
  11. 'email'=> 'nw@163.com',
  12. 'mobile'=> '16667874598',
  13. ];
  14. extract($data);
  15. $stmt->execute() or die($stmt->error);
  16. printf('更新成功了%s条数据',$stmt->affected_rows);
  17. $mysqli->close();
  18. //update重点:在SQL语句中的条件WHERE必须在bind_param中最后
  • 2.PDO对数据库的更新:
    • 调用connect.php文件。
    • 编写sql更新语句$sql =’UPDATE 数据表 SET 标题=?… WHRER 标题=;
    • 使用?防SQL注入。
    • 使用prepare(),执行等待SQL操作。
    • 创建$mysqli->prepare()对象。
    • 对更新的数据赋值
    • 使用executc(),更新到数据库
      示例
  1. <?php
  2. require 'connect.php';
  3. $sql = 'UPDATE `user` SET `username`=?,`password`=?,`sex`=?,`age`=?,`email`=?,`mobile`=? WHERE `Id`=?;';
  4. $stmt = $pdo->prepare($sql);
  5. $username ='赤脚大仙';
  6. $sex ='男';
  7. $password =sha1('66666');
  8. $email ='cjdx@163.com';
  9. $mobile = '13745455656';
  10. $age = 388;
  11. $id = 321;
  12. $stmt->execute([$username,$password,$sex,$age,$email,$mobile,$id]);
  13. if($stmt->rowCount()>0)exit('成功更新了'.$stmt->rowCount().'条数据');else echo('更新失败');

3、 DELETE连接数删除

  • 1.mysqli对数据库的删除:
    • 调用connect.php文件。
    • 编写sql删除语句$sql =’DELETE FROM 数据表 WHERE 标题=?;’;
    • 使用?防SQL注入。
    • 使用prepare(),执行等待SQL操作。
    • 创建$mysqli->prepare()对象
    • 使用bindparm()占位符绑定变量
    • 对删除的条件赋值,或用户提交
    • exeract()对数组的值转变量。
    • 使用executc(),删除数据库数据
      示例
  1. <?php
  2. <?php
  3. require'connect.php';
  4. $sql = 'DELETE FROM `user` WHERE `Id`=?;';
  5. $stmt = $mysqli->prepare($sql);
  6. $stmt->bind_param('i',$id);
  7. $id=318;
  8. $stmt->execute() or die($stmt->error);
  9. printf('删除成功了%s条数据,主键ID是:',$stmt->affected_rows);
  10. $mysqli->close();
  • 2.PDO对数据库的删除:
    • 调用connect.php文件。
    • 编写sql删除语句$sql =’DELETE FROM 数据表 WHERE 标题=?;’;
    • 使用?防SQL注入。
    • 使用prepare(),执行等待SQL操作。
    • 创建$mysqli->prepare()对象
    • 对删除的条件赋值,或用户提交
    • exeract()对数组的值转变量。
    • 使用executc(),删除数据库数据
      示例
  1. <?php
  2. require 'connect.php';
  3. $sql = 'DELETE FROM `user` WhERE `Id` > ?;';
  4. $stmt=$pdo->prepare($sql);
  5. $id = 329;
  6. $stmt->execute([$id]);
  7. if($stmt->rowCount()>0) echo '成功删除'.$stmt->rowCount().'条记录'; else echo'';
  8. $pod=NULL;

3、 SELECT连接数查询

  • 1.mysqli对数据库的查询:

    • 调用connect.php文件。
    • 编写sql查询语句$sql =’SELECT * FROM 表名;
    • 使用prepare(),执行等待SQL操作。
    • 创建$mysqli->prepare()对象
    • 执行executc()查询数据库
    • 创建$stmt->get_result()对象
    • 判断数据库是否为空$result->num_row
    • $result->fetch_assoc()返回单条数据
    • 使用while循环对数据库中查询的数据集遍历

    示例

  1. <?php
  2. require'connect.php';
  3. $sql = 'SELECT * FROM `user`';
  4. $stmt = $mysqli->prepare($sql);
  5. $stmt->execute() or die(error());
  6. $result = $stmt->get_result();
  7. if($result->num_rows===0) echo '数据库为空!';
  8. while($res=$result->fetch_assoc())
  9. {
  10. vprintf('%d:%s | %s | %s<br>',$res);
  11. }
  12. $result->free();
  13. $mysqli->close();
  14. //select 重点
  15. //get_result 创建mysqliget_result 对象
  16. //fetch_assoc() 以关联返回单条数据
  17. //free() 释放结果集
  • 2.mysqli对数据库的查询:

    • 调用connect.php文件。
    • 编写sql查询语句$sql =’SELECT 标题…, FROM 表名WHERE 标题=?;
    • 使用prepare(),执行等待SQL操作。
    • 创建$mysqli->prepare()对象
    • 使用bindparm()占位符绑定变量
    • 执行executc()查询数据库
    • 使用bin_result(),将变量绑定字段
    • store->result() 记录集回传
    • 判断数据库是否为空$stmt->num_row
    • $stmt->fetch() 遍历变量中的字段
    • 使用whlie循环对数据库中查询的数据集遍历

    示例

  1. <?php
  2. require 'connect.php';
  3. $sql = 'SELECT `username`,`sex`,`mobile` FROM `user` WHERE `id` >?;';
  4. $stmt= $mysqli->prepare($sql);
  5. $stmt->bind_param('i',$id);
  6. $id = 3;
  7. $stmt->execute() or die($stmt->error);
  8. $stmt->bind_result($username,$sex,$mobile);
  9. $stmt->store_result();
  10. if($stmt->num_rows===0) exit('没有要查询的数据');
  11. while($stmt->fetch())
  12. {
  13. printf('%s | %s | %s <br>',$username,$sex,$mobile);
  14. }
  15. //select 重点:
  16. //使用bind_result 字段和变量绑定
  17. // store_result 将所有记录集回传
  18. //fetch 遍历变量中的字段
  19. //个人理解,将bind_result中的记录集回传到$stmt
  20. //使用while将$stmt中的记录集循环输出。
  • 3.mysqli对数据库的查询:

    • 调用connect.php文件。
    • 编写sql查询语句$sql =’SELECT 标题…, FROM 表名WHERE 标题=?;
    • 使用prepare(),执行等待SQL操作。
    • 创建$mysqli->prepare()对象
    • 使用bind_parm()占位符绑定变量
    • 执行executc()查询数据库
    • 创建$stmt->get_result()对象
    • 判断数据库是否为空$result->num_row
    • $result->fetch_all() 符合条件的所有记录集
    • 使用foreach循环对数据库中查询的数据集遍历

    示例

  1. <?php
  2. require 'connect.php';
  3. $sql = 'SELECT `username` FROM `user` WHERE `Id`>?;';
  4. $stmt= $mysqli->prepare($sql);
  5. $stmt->bind_param('i',$id);
  6. $id = 3;
  7. $stmt->execute() or die($stmt->error);
  8. $result=$stmt->get_result();
  9. if($result->num_rows===0) exit('数据库为空');
  10. foreach($res=$result->fetch_all() as $user)
  11. {
  12. vprintf('%s<br>',$user);
  13. }
  14. $result->free();
  15. $mysqli->close();
  16. //select foreach 重点:
  17. //创建get_result对象,使用fetch_all获得记录集,使用foreach循环输出
  • 4.PDO对数据库的查询:

    • 调用connect.php文件。
    • 编写sql查询语句$sql =’SELECT 标题…, FROM 表名WHERE 标题=?;
    • 使用prepare(),执行等待SQL操作。
    • 创建$pdo->prepare()对象
    • 条件赋值
      • $stmt->fetch() 遍历变量中的字段
    • 使用while循环对数据库中查询的数据集遍历

    示例

  1. <?php
  2. require 'connect.php';
  3. $sql="SELECT * FROM `user` WHERE `id` > ?";
  4. $stmt = $pdo->prepare($sql);
  5. $id =0;
  6. $stmt->execute([$id]);
  7. while ($user = $stmt->fetch()) {
  8. echo $user['username'].'<br>';
  9. }
  10. $pdo=NULL;
  • 5.PDO对数据库的查询:

    • 调用connect.php文件。
    • 编写sql查询语句$sql =’SELECT 标题…, FROM 表名WHERE 标题=?;’;
    • 使用prepare(),执行等待SQL操作。
    • 创建$pdo->prepare()对象
    • 条件赋值
      • $stmt->fetchAll() 遍历数条件据表
    • 使用foreach循环对数据库中查询的数据集遍历

    示例

  1. <?php
  2. require 'connect.php';
  3. $sql="SELECT * FROM `user` WHERE `id` > ?";
  4. $stmt = $pdo->prepare($sql);
  5. $id =0;
  6. $stmt->execute([$id]);
  7. foreach($res=$stmt->fetchAll() as $value)
  8. {
  9. echo $value['username'].'<br>';
  10. }
  11. $pdo->NULL;
  • 6.PDO对数据库的查询:

    • 调用connect.php文件。
    • 编写sql查询语句$sql =’SELECT 标题…, FROM 表名WHERE 标题=?;’;
    • 使用prepare(),执行等待SQL操作。
    • 创建$pdo->prepare()对象
    • 条件赋值
    • 执行execute();
    • 使用bindColumn对条件赋值。
    • $stmt->fetch(PDO::FETCH_BOUND)返回结果集给bindColumn()
    • 使用While循环对数据库中查询的数据集遍历

    示例

  1. <?php
  2. require "connect.php";
  3. $sql='SELECT * FROM `user` WHERE `id` > ?;';
  4. $stmt=$pdo->prepare($sql);
  5. $id=1;
  6. $stmt->execute([$id]);
  7. $stmt->bindColumn('username',$username);
  8. $stmt->bindColumn('password',$password);
  9. $stmt->bindColumn('age',$age);
  10. $stmt->bindColumn('sex',$sex);
  11. $stmt->bindColumn('email',$email);
  12. $stmt->bindColumn('mobile',$mobile);
  13. while($stmt->fetch(PDO::FETCH_BOUND))
  14. {
  15. printf('%s|%s|%s|%s|',$username,$sex,$age,$mobile);
  16. echo "<br>";
  17. }
  18. $pdo=NULL;
  • 7 PDO 数据库记数
    • count函数是用来统计表中或数组中记录的一个函数
    • 使用count对sql的记录集统计
    • 使用bindColumn() count赋值
    • 使用PDO::FETCH_BOUND返回count记录集的数量
    • 说明:统计方式不会报错或无显。
  1. $sql = 'SELECT COUNT(`id`) AS `count` FROM `user` WHERE `id` >?;';
  2. $stmt=$pdo->prepare($sql);
  3. $id=1;
  4. $stmt->execute([$id]);
  5. $stmt ->bindColumn('count',$count);
  6. $stmt ->fetch(PDO::FETCH_BOUND);
  7. echo '查询到了'.$count.'条记录';
  8. $pdo =null;
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议