博主信息
博文 34
粉丝 0
评论 0
访问量 39342
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
MySQLi面向对象中的查询操作+PDO 的优势+PDO 连接数据库+PDO增删改查+获取结果集记录数量的正确方式
Belifforz的博客
原创
1175人浏览过
  1. MySQLi面向对象中的查询操作

  2. 实例

    <?php
    /**
     * 预处理查询操作
     */
    
    //连接数据库
    require 'demo1.php';
    
    //准备SQL语句
    $sql = "SELECT `id`,`name`,`salary` FROM `staff` WHERE `salary` > ?;";
    
    //创建预处理对象
    $stmt -> $mysqli->stmt_init();
    
    //
    if($stmt->prepare($sql)){
        //绑定参数
        $stmt->bind_param('i',$salary);
    
        //设置参数
        $salary = 6000;
        if($stmt->execute()){
            //获取结果集并放到缓存区
            $stmt->store_result();
    
            //结果集中的列绑定到变量
            $stmt->bind_result($id,$name,$salary);
    
            //结果集是否为空,不为空才遍历
            if($stmt->num_rows> 0){
                //循环遍历结果集
                //fetch()每次获取一条记录,并将指针自动下移
                while($stmt->fetch()){
                    echo '<p>id:'.$id.'---姓名:'.$name.'---工资:'.$salary.'</p>';
                }
            }else{
                exit("<p>当前表中没有数据</p>");
            }
            $stmt->free_result();
    
    
        }else{
            //返回执行阶段的出错信息
            exit($stmt->errno.":".$stmt->error);
        }
    }else{
        //返回sql语句检测阶段的出错信息
        exit($stmt->errno.":".$stmt->error);
    }
    //注销stmt对象
    $stmt->close();
    //关闭连接
    $mysqli->close();

    运行实例 »

    点击 "运行实例" 按钮查看在线实例

    ---------------------------------------

  3. 2.PDO 的优势

      实例

      PDO真正的以底层实现的统一接口数库操作接口,不管后端使用的是何种数据库,
      如果代码封装好了以后,应用层调用基本上差不多的,
      当后端数据库更换了以后,应用层代码基本不用修改.
      PDO可以防止SQL注入,确保数据库更加安全

      运行实例 »

      点击 "运行实例" 按钮查看在线实例

      3连接数据库

      实例

      <?php
      /**
       * 新增记录
       */
      
      //连接数据库
      
      $pdo = NEW PDO('mysql:host=127.0.0.1;dbname=php','root','root');
      
      //准备SQL语句,占位符不用?  用'命名占位符'
      $sql = "INSERT `user` SET `name` =:name , `email` = :email , `password` = sha1(:password)";
      
      //创建预处理对象
      $stmt = $pdo->prepare($sql);
      
      //绑定参数
      
      $data = ['name' => '张三', 'email' => 'zhangsam@qq.com' ,'password' => '123456'];
      $stmt -> bindParam('name',$data['name'],PDO::PARAM_STR);
      $stmt -> bindParam('email',$data['email'],PDO::PARAM_STR);
      $stmt -> bindParam('password',$data['password'],PDO::PARAM_STR);
      
      if($stmt->execute()){
          //rowCount():返回受影响的记录数量
          echo '<h3>成功添加了'.$stmt->rowCount().'条记录</h3>';
      }else{
          echo '<h3>添加失败</h3>';
          print_r($stmt->errorInfo());//返回打印出错误信息
          exit();
      }
      //关闭连接
      $pdo=null;

      运行实例 »

      点击 "运行实例" 按钮查看在线实例

      4.新增数据

      实例

      <?php
      /**
       * 新增记录
       */
      
      //1连接数据库
      
      $pdo = NEW PDO('mysql:host=127.0.0.1;dbname=php','root','root');
      /*
      //2准备SQL语句,占位符不用?  用'命名占位符'
      $sql = "INSERT `user` SET `name` =:name , `email` = :email , `password` = sha1(:password)";
      
      //3创建预处理对象
      $stmt = $pdo->prepare($sql);
      
      //4设置参数
      
      $data = ['name' => '王五', 'email' => 'wangwu@qq.com' ,'password' => '12345678'];
      
      //5执行参数
      $stmt->execute($data);
      */
      
      //另一种写法 直接执行添加
      $stmt = $pdo->prepare("INSERT `user` SET `name` =:name , `email` = :email , `password` = sha1(:password)");
      
      $stmt->execute(['name' => '王五', 'email' => 'wangwu@qq.com' ,'password' => '12345678']);
      echo '<h3>成功添加了'.$stmt->rowCount().'条记录</h3>';
      
      //    echo '<h3>添加失败</h3>';
      //    print_r($stmt->errorInfo());//返回打印出错误信息
      //    exit();
      
      //关闭连接
      $pdo=null;

      运行实例 »

      点击 "运行实例" 按钮查看在线实例

      5.更新数据

      实例

      <?php
      /**
       * 更新记录
       */
      
      //连接数据库
      
      $pdo = NEW PDO('mysql:host=127.0.0.1;dbname=php','root','root');
      
      //准备SQL语句,占位符不用?  用'命名占位符'
      $sql = "UPDATE `user` SET `email` =:email WHERE `id`=:id";
      
      //创建预处理对象
      $stmt = $pdo->prepare($sql);
      
      //执行查询
      if($stmt->execute(['email' => 'lisi@163.com','id' => 4])){
          //rowCount():返回受影响的记录数量
          echo '<h3>成功更新了'.$stmt->rowCount().'条记录</h3>';
      }else{
          echo '<h3>更新失败</h3>';
          print_r($stmt->errorInfo());//返回打印出错误信息
          exit();
      }
      //关闭连接
      $pdo=null;

      运行实例 »

      点击 "运行实例" 按钮查看在线实例

      6.删除数据

      实例

      <?php
      /**
       * 删除记录
       */
      
      //连接数据库
      
      $pdo = NEW PDO('mysql:host=127.0.0.1;dbname=php','root','root');
      
      //准备SQL语句,占位符不用?  用'命名占位符'
      $sql = "DELETE FROM `user` WHERE `id`=:id";
      
      //创建预处理对象
      $stmt = $pdo->prepare($sql);
      
      //执行查询
      if($stmt->execute(['id' => 3])){
          //rowCount():返回受影响的记录数量
          echo '<h3>成功删除了'.$stmt->rowCount().'条记录</h3>';
      }else{
          echo '<h3>删除失败</h3>';
          print_r($stmt->errorInfo());//返回打印出错误信息
          exit();
      }
      //关闭连接
      $pdo=null;

      运行实例 »

      点击 "运行实例" 按钮查看在线实例

      7.删除数据

      实例

      <?php
      /**
       * 查询记录
       */
      
      //连接数据库
      
      $pdo = NEW PDO('mysql:host=127.0.0.1;dbname=php','root','root');
      
      //准备SQL语句,占位符不用?  用'命名占位符'
      $sql = "SELECT `name`,`email` FROM `user` WHERE `id` > :id";
      
      //创建预处理对象
      $stmt = $pdo->prepare($sql);
      var_dump($stmt);
      //执行查询
      $stmt->execute(['id' => 1]);
      
      //一次性取出---问题:如果一次性取出太多,内存会爆,不建议使用,除非是少量数据
      //$rows = $stmt->fecthAll();
      //foreach($rows as $value ){
      //    echo 'name:',$rows['name'],',email:',$rows['email'],'<br>';
      //}
      
      while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
          echo var_export($row),'<br>';
      }
      
      //关闭连接
      $pdo=null;

      运行实例 »

      点击 "运行实例" 按钮查看在线实例

      8 获取结果集记录数量的正确方式是什么?


      用COUNT(*)获取结果集,用$PDO->fetchColumn()取出结果集记录数量


    批改状态:合格

    老师批语:
    本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
    全部评论 文明上网理性发言,请遵守新闻评论服务协议
    0条评论
    关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送
    PHP中文网APP
    随时随地碎片化学习

    Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  4. 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学