博客列表 >MySQLi面向对象中的查询操作+PDO 的优势+PDO 连接数据库+PDO增删改查+获取结果集记录数量的正确方式

MySQLi面向对象中的查询操作+PDO 的优势+PDO 连接数据库+PDO增删改查+获取结果集记录数量的正确方式

Belifforz的博客
Belifforz的博客原创
2018年09月03日 18:23:391018浏览
  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 核实处理。
    全部评论
    文明上网理性发言,请遵守新闻评论服务协议