Blogger Information
Blog 36
fans 0
comment 0
visits 28490
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
pdo的增删改查操作总结——2018年8月30日
Jackson
Original
1966 people have browsed it
  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()一次获取一条,指针自动下移

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments