博客列表 >pdo的增删改查操作总结——2018年8月30日

pdo的增删改查操作总结——2018年8月30日

Jackson
Jackson原创
2018年09月09日 00:28:431973浏览
  1. mysqli面向对象的查询操作

    主要通过store_result()来获取结果集,然后用bind_result()把结果集绑定在变量上,最后用fetch()来每次获取结果集中的一条数据,代码如下:

    实例

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

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

  2. pdo的优势

    pdo是php数据对象,为其他数据库提供了一个统一的接口,也就是说可以操作所有的数据库,使用很方便。

  3. pdo连接数据库

    实例

    <?php
    /**
     * pdo php数据对象, 是php操作所有数据库的抽象层,提供了一个统一的方法
     */
    //new PDO(数据源,用户名,密码)
    //数据源:设置数据库类型,以及服务器地址,默认的数据库
    $dsn = 'mysql:host=127.0.0.1; dbname=php';
    //用户名
    $user = 'root';
    //密码
    $pass = 'root';
    //实例化pdo,创建pdo对象看,并实现数据库连接
    //语法结构try{}catch{}
    try{
        $pdo = new PDO($dsn, $user, $pass);
    }catch(PDOException $e){ //pdoexception 数据类型  pdo异常 $e对象
        die('connect error:'.$e->getMessage());//getMessage()获取pdo错误信息
    }
    
    //关闭连接
    //$pdo = null;
    //unset($pdo);
    运行实例 »

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

  4. pdo新增数据

    实例

    <?php
    /**
     * 新增记录
     */
    //1.连接数据库 创建pdo对象
    $pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
    
    //2.准备sql语句,占位符不用? ,用:字段名
    $sql = "INSERT `user` SET `user_name`=:name, `email`=:email, `password`=sha1(:password);";
    
    // 3.创建预处理对象
    $stmt = $pdo->prepare($sql);
    
    //4.参数绑定
    $data = ['name'=>'jack','email'=>'jack@php.cn','password'=>'root'];
    $stmt->bindParam(':name',$data['name'],PDO::PARAM_STR);//PDO::PARAM_STR指定参数类型为字符串
    $stmt->bindParam(':email',$data['email'],PDO::PARAM_STR);
    $stmt->bindParam(':password',$data['password'],PDO::PARAM_STR);
    
    //5.执行语句
    if ($stmt->execute()){//判断执行是否成功
        //rowcount():返回受影响的记录数量
        echo "<h3>成功添加了:{$stmt->rowCount()}条记录</h3>";
    }else{
        echo '<h3>添加失败</h3>';
        print_r($stmt->errorInfo());//打印执行失败信息
        die();
    }
    
    $stmt = null;
    //关闭连接
    $pdo = null;

    运行实例 »

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

  5. pdo更改数据

    实例

    <?php
    /**
     * update数据
     */
    
    //连接数据库
    $pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
    
    //准备sql语句
    $sql = "UPDATE `user` SET `email`=:email WHERE `user_id`=:id;";
    
    //预处理对象
    $stmt = $pdo->prepare($sql);
    
    //传参执行
    if($stmt->execute(['email'=>'333@qq.com','id'=>'134'])){
        //是否修改成功
        if($stmt->rowCount() > 0 ){//受影响记录是否>0
            echo '<h3>成功修改了',$stmt->rowCount(),'条数据</h3>';
        }else{
            echo '无修改';
            print_r($stmt->errorInfo());//返回修改错误信息
        }
    }else{
        print_r($stmt->errorInfo());//返回执行错误信息
        die();
    }
    //注销对象
    unset($stmt,$pdo);

    运行实例 »

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

  6. pdo删除数据

    实例

    <?php
    /**
     * 删除数据
     */
    //连接数据库
    $pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
    
    //准备sql语句
    $sql = "DELETE FROM `user` WHERE `user_id`>:id; ";
    
    //创建预处理对象
    $stmt = $pdo->prepare($sql);
    //传参 执行语句
    if($stmt->execute(['id'=>3])){//是否执行成功
        //是否有数据删除
        if ($stmt->rowCount()){
            echo '<h3>成功删除了',$stmt->rowCount(),'条数据</h3>';
        }else{
            echo "无数据删除";
            print_r($stmt->errorInfo());
        }
    }else{
        print_r($stmt->errorInfo());
        die();
    }
    
    unset($stmt,$pdo);

    运行实例 »

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

  7. pdo查询数据

    实例

    <?php
    /**
     * 查询数据
     *
     */
    //连接数据库
    $pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
    $pdo->query('set names utf8;');//设置编码
    //准备sql语句
    $sql = "SELECT `staff_id`, `name`, `salary` FROM `staff` WHERE `salary`>:salary; ";
    //$sql = "SELECT `user_id`, `user_name` FROM `user` WHERE `user_id`>:id; ";
    
    //创建预处理对象
    $stmt = $pdo->prepare($sql);
    //传参执行
    if($stmt->execute(['salary'=>7000])){
        if ($stmt->rowCount()>0){//受影响行数
    //        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);//一次获取结果集
    ////        var_export($rows);
    //        foreach ($rows as $v){//遍历结果集
    //            echo 'id:',$v['staff_id'],' ,name:',$v['name'],' ,salary:',$v['salary'],'<br>';
    //        }
            //pdo::fetch()每次获取一条记录,返回一个数组
            while ($rows = $stmt->fetch(PDO::FETCH_ASSOC)){
                echo 'id:',$rows['staff_id'],' ,name:',$rows['name'],' ,salary:',$rows['salary'],'<br>';
            }
        }else{
            echo '<h3>查询失败</h3>';
            print_r($stmt->errorInfo());
        }
    }else{
        print_r($stmt->errorInfo());
        die();
    }
    
    //注销对象
    unset($stmt,$pdo);

    运行实例 »

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

  8. 获取结果集的正确方法

         $stmt->rowCount()可以适用于增、删、改,这3个可以正确获取结果数量,查询则要使用select count()

和$stmt->fetchColumn()结合使用返回正确结果集个数。


总结:

         pdo的操作基本流程都差不多,有以下步骤:

  1. 连接数据库,创建pdo连接对象

  2. 准备sql语句

  3. 创建sql预处理对象prepare()

  4. 参数绑定 bindParam()

  5. 执行sql语句execute()

  6. 获取结果集fetchAll()一次获取,fetch()一次获取一条,指针自动下移

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