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; //关闭连接
原文地址:https://www.cnblogs.com/hf8051/p/4669772.html