zoukankan      html  css  js  c++  java
  • php -- PDO

    PDO:php data object,php数据对象

    1、new PDO

      PDO::__construct ( string $dsn [, string $username [, string $password [, array $driver_options ]]] )

      $dsn:服务器相关信息,包括

        1)选取哪一种数据库

        2)服务器域名

        3)连接到数据库的端口号

        4)连接的数据库

      $username:登陆的用户名

      $password:登陆密码

      例如:

        $pdo = new PDO('mysql:host=localhost;port=3306;dbname=project','root','root');

    2、exec(),执行没有结果集返回的语句,返回受影响的行数

      如:增、删、改、设置字符集 等等...

      例如:

        2.1)设置字符集

          $sql = "set names utf8";

          $pdo->exec($sql);

        2.2)增

          $sql = "insert into pro_student values(null,'陶丹凤','itcast0013',1,19,2)";
          $pdo->exec($sql);

        2.3)删

          $sql = "delete from pro_student where s_id = 12";
          $affected_rows = $pdo->exec($sql);

        2.4)改

          $sql = "update pro_student set c_id = 3 where s_id = 12";
          $affected_rows = $pdo->exec($sql);

    3、query(),执行有结果集返回的语句,返回结果集

      如:查询表数据,查询数据库中有多少表

      例如:

      3.1)查询表

        $sql = "show tables";
        $stmt = $pdo->query($sql);  //返回的是PDOStatement类对象(结果集对象)

      3.2)查询表中数据

        $sql = "select * from pro_student order by s_age limit 1";

        $stmt = $pdo->query($sql);  //执行得到PDOStatement对象

        var_dump($stmt->fetch());  //从结果集中解析数据

    4、结果集对象(PDOStatement)方法

      fetch()、fetchColumn()、fetchObject()、fetchAll()  处理结果集中的数据

      4.1)fetch():取出结果集中的第一行数据

        mxied  PDOStatement::fetch ([ int $fetch_style [, int $cursor_orientation = PDO::FETCH_ORI_NEXT [, int $cursor_offset = 0 ]]] )

        参数:

          $fetch_style:几种常用的常量

            PDO::FETCH_BOTH(默认):返回一个索引为结果集列名和以0开始的列号的数组 PDO::FETCH_NUM:返回一个索引为以0开始的结果集列号的数组 

            PDO::FETCH_ASSOC:返回一个索引为结果集列名的数组 

            PDO::FETCH_NUM:返回一个索引为以0开始的结果集列号的数组 

      4.2)fetchColumn():取出结果集中第一行的某一列的数据

        string PDOStatement::fetchColumn ([ int $column_number = 0 ] )  

        参数:

          $column_number:需要返回的列,该参数只能为数字,不能为列名

      4.3)fetchObject():获取下一行并作为一个对象返回

        mxied PDOStatement::fetchObject ([ string $class_name = "stdClass" [, array $ctor_args ]] )

        参数:

          $class_name = "stdClass":类名称

            stdClass:标准类,空类

            $str = ‘abcd’;

            $o = (object)$str;             //得到的对象就是stdClass对象

          若用户指定了类,则该类必须在当前脚本中存在(若不存在,自己定义一个对应空类即可)     

        例如:

          $sql = "select * from pro_student";      

          var_dump($stmt->fetchObject('Person'));
          class Person{}

      4.4)fetchAll():返回一个包含结果集中所有行的数组

        array PDOStatement::fetchAll ([ int $fetch_style [, mixed $fetch_argument [, array $ctor_args = array() ]]] )

        例如:

          $sql = "select * from user";

          $stmt = $pdo->query($sql);

          var_dump($stmt->fetchAll(PDO::FETCH_NUM));

      4.5)bindColumn与fetch联合使用

        bindColumn:绑定一列到一个 PHP 变量

        bool PDOStatement::bindColumn ( mixed $column , mixed &$param [, int $type [, int $maxlen [, mixed $driverdata ]]] )

        例如:

          $sql = "select * from user";

          $stmt = $pdo->query($sql);

          $stmt->bindColumn('s_name',$name); //将s_name列的内容赋值给$name变量

          $stmt->bindColumn(3,$number); //判断的索引从1开始,将第3列的内容赋值给$number变量

          var_dump($stmt->fetch()); //执行完$stmt->fetch()后,就将对应内容绑定到变量中去了

          echo $name,$number;

         

        作用:为了操作方便,为了弥补fetchColumn只能获取一个字段值的缺陷。

    5、关闭连接

      PDO没有关闭连接的方法,但是由于PHP提供了垃圾回收机制,所以将$pdo指向为null,或者unset($pdo)后,因为回收机制,连接就断开了

      $pdo = null

      或

      unset($pdo);

    具体例子:

    <?php
    
        header('Content-type:text/html;charset=utf-8');
        echo '<pre>';
    
        //fetch查询
        //1.    连接数据库
        $pdo = new PDO('mysql:host=localhost;port=3306;dbname=project','root','root');
        //var_dump($pdo);
    
        //2.    设置字符集
        $sql = "set names utf8";
        $pdo->exec($sql);
    
        //3.    准备查询SQL语句
        $sql = "select * from pro_student";
    
        //调用query方法
        $stmt = $pdo->query($sql);
        
        //1.    获取混合数组
        //var_dump($stmt->fetch());                        //混合数组    
        //2.    得到一个关联数组
        //echo PDO::FETCH_ASSOC;
        //var_dump($stmt->fetch(PDO::FETCH_ASSOC));        
        //var_dump($stmt->fetch(2));        
        //3.    索引数组
        //var_dump($stmt->fetch(PDO::FETCH_NUM));
        //4.    得到全部数组(关联)
        //var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
    
        //fetchColumn
        //var_dump($stmt->fetchColumn());            //默认获取到第一列的数据
        //var_dump($stmt->fetchColumn(1));        //获取第二列的数据(一个字段值)
        //var_dump($stmt->fetchColumn('s_name'));    //错误
    
        //fetchObject
        //var_dump($stmt->fetchObject());
        //class Person{}
        //var_dump($stmt->fetchObject('Person'));
    
        //bindColumn,将指定结果集中的fetch所得到的记录中某个字段值,赋值给指定变量
        $stmt->bindColumn('s_name',$name);
        $stmt->bindColumn(3,$number);            //判断的索引从1开始
        var_dump($stmt->fetch());
        echo $name,$number;
    
        $stmt->fetch();
        echo $name,$number;
    
        //遍历结果集
        //for循环实现fetchAll
        //知道循环条件边界
        $length = $stmt->rowCount();
        $all = array();
        for($i = 0;$i < $length;$i++){
            //将每次得到的一个关联数组存放到all数组中
            $all[] = $stmt->fetch(PDO::FETCH_ASSOC);
        }
    
        //var_dump($all);

      $pdo = null; //关闭连接
  • 相关阅读:
    flush table with read lock的轻量级解决方案
    Linux进程关系(转载)
    常用的linux系统监控命令
    MySQL 5.7 InnoDB缓冲池NUMA功能支持——但是别高兴的太早
    网站收集ing....
    【转】程序设计语言中的 一等公民,二等公民,三等公民
    sbt修改为阿里云镜像
    java 中的原始类型与原始封装类型
    【转】MySql中row_number()、rank()、dense_rank() 的区别
    WPS_word使用
  • 原文地址:https://www.cnblogs.com/hf8051/p/4669772.html
Copyright © 2011-2022 走看看