zoukankan      html  css  js  c++  java
  • pdo的用处,用法

    PDO主要是用来对数据库进行访问的。PDO扩展为PHP访问数据库定义了一个轻量级的一致接口,不同数据库在访问时,采用相同方法名称,解决了连接数据库不统一问题。PDO扩展自身并不能实现任何数据库功能,必须使用一个具体数据库的PDO驱动来访问数据库服务。

     pdo特点: 性能:比传统和原生访问数据库方式的效率高。

      运行时扩展:pdo是模块化的。能在项目运行时加载数据库的驱动。

     pdo的安装问题:

     找到扩展配置位置,添加extension=php_pdo_mysql.dll。 如果代码存在,则把前面的分号注释去掉即可。extension=php_pdo.dll同理

     重启apache

     pdo的分类:

     PDO类 : 主要用户数据库连接,发送sql语句
     PDOStatement类 : 主要用来解释结果集,实现预处理,事物处理
     PDOException类 : 主要用于捕获PDO异常

    创建PDO对象:

     变量名 = new PDO('数据库源','用户名','密码');

     例如:$db = new PDO('mysql:host=localhost;port=3306;charset=utf8;dbname=stu','root','root');

      exec()方法执行一条 SQL 语句,并返回受影响的行数,建议用于增删改的SQL执行操作

      query()方法执行一条SQL语句,并返回结果集,建议用于查询的SQL执行操作

      对应query()方法,可以通过setFetchMode(PDO::FETCH_ASSOC) 设置获取结果集的返回类型

      setFetchMode方法的一个PDO参数可以有三个值:

      PDO::FETCH_ASSOC 只返回关联数组。
      PDO::FETCH_NUM  只返回数字下标数组。
      PDO::FETCH_BOTH  默认的,关联数组+数字下标的数组。

      fetch()方法从结果集中获取下一行 ,一次只能返回一行数据,获取不到数据返回false,通过参数可以设置结果集的返回类型

      参数一共有以下几个:

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

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

    • PDO::FETCH_BOUND:返回 TRUE ,并分配结果集中的列值给 PDOStatement::bindColumn() 方法绑定的 PHP 变量。

    • PDO::FETCH_CLASS:返回一个请求类的新实例,映射结果集中的列名到类中对应的属性名。

    • PDO::FETCH_INTO:更新一个被请求类已存在的实例,映射结果集中的列到类中命名的属性

    • PDO::FETCH_LAZY:结合使用 PDO::FETCH_BOTHPDO::FETCH_OBJ,创建供用来访问的对象变量名

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

    • PDO::FETCH_OBJ:返回一个属性名对应结果集列名的匿名对象

      fetchAll()方法返回一个包含结果集中所有行的数组 ,通过参数可以设置结果集的返回类型。想要获取结果集中单独一列的唯一值,需要将    PDO::FETCH_COLUMNPDO::FETCH_UNIQUE 按位或。想要返回一个根据指定列把值分组后的关联数组,需要将 PDO::FETCH_COLUMN 和   PDO::FETCH_GROUP 按位或。

    通过参数可以设置结果集的返回类型:

    • PDO::FETCH_COLUMN:返回指定以0开始索引的列。

    • PDO::FETCH_CLASS:返回指定类的实例,映射每行的列到类中对应的属性名。

    • PDO::FETCH_FUNC:将每行的列作为参数传递给指定的函数,并返回调用函数后的结果。

      rowCount()方法 返回受上一个 SQL 语句影响的行数

      prepare()方法生成一个PDOStatement对象,查询不会立即执行,而是预处理

      例如: $stmt = $db->prepare("select * from test");

      execute()方法执行一条预处理语句

    PDO的预处理:

    预处理功能就是在SQL语句结构与形式相同的情况下,只有参数不同所采用的一种数据处理机制,其极大的减少了带宽的浪费。

    参数绑定:

    bindParam  =>   绑定一个参数到指定的变量名。绑定一个PHP变量到用作预处理的SQL语句中的对应命名占位符或问号占位符。这个方法只能绑定变量。

    bindValue   =>  把一个值绑定到一个参数 。绑定一个值到用作预处理的 SQL 语句中的对应命名占位符或问号占位符。

    特别注意:参数标识符。对于使用命名占位符的预处理语句,应是类似 :name 形式的参数名。对于使用问号占位符(?)的预处理语句,应是以1开始索引的参数位置。


    PDO中的事务处理功能:
    ① 开启事务
      PDO::beginTransaction
    ② 提交事务
      PDO::commit
    ③ 回滚事务
      PDO::rollBack

    PDO异常处理

    异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程。这种情况称为异常。

    PDO异常捕获:

    try{

    $db = new PDO(“mysql:host=localhost;dbname=test”,”root”,”root”);

    }catch(PDOException $e){ //捕获得错误。

    echo $e->getMessage(); //错误信息

    }

    PDO属性的获取与设置:
    setAttribute   =>   设置数据库句柄属性。

    getAttribute  =>    获取数据库连接的属性值

    一些可用的通用属性:

    • PDO::ATTR_CASE:强制列名为指定的大小写。

      • PDO::CASE_LOWER:强制列名小写。

      • PDO::CASE_NATURAL:保留数据库驱动返回的列名。

      • PDO::CASE_UPPER:强制列名大写。

    • PDO::ATTR_ERRMODE:错误报告。

      • PDO::ERRMODE_SILENT: 仅设置错误代码。

      • PDO::ERRMODE_WARNING: 引发 E_WARNING 错误

      • PDO::ERRMODE_EXCEPTION: 抛出 exceptions 异常。

    • PDO::ATTR_ORACLE_NULLS (在所有驱动中都可用,不仅限于Oracle): 转换 NULL 和空字符串。

      • PDO::NULL_NATURAL: 不转换。

      • PDO::NULL_EMPTY_STRING: 将空字符串转换成 NULL

      • PDO::NULL_TO_STRING: 将 NULL 转换成空字符串。

    • PDO::ATTR_STRINGIFY_FETCHES: 提取的时候将数值转换为字符串。

    • PDO::ATTR_STATEMENT_CLASS: 设置从PDOStatement派生的用户提供的语句类。 不能用于持久的PDO实例。

    • PDO::ATTR_TIMEOUT: 指定超时的秒数。并非所有驱动都支持此选项,这意味着驱动和驱动之间可能会有差异。比如,SQLite等待的时间达到此值后就放弃获取可写锁,但其他驱动可能会将此值解释为一个连接或读取超时的间隔。 需要 int 类型。

    • PDO::ATTR_AUTOCOMMIT (在OCI,Firebird 以及 MySQL中可用): 是否自动提交每个单独的语句。

    • PDO::ATTR_EMULATE_PREPARES 启用或禁用预处理语句的模拟。 有些驱动不支持或有限度地支持本地预处理。使用此设置强制PDO总是模拟预处理语句(如果为 TRUE ),或试着使用本地预处理语句(如果为 FALSE)。如果驱动不能成功预处理当前查询,它将总是回到模拟预处理语句上。 需要 bool 类型。

    • PDO::MYSQL_ATTR_USE_BUFFERED_QUERY (在MySQL中可用): 使用缓冲查询。

    • PDO::ATTR_DEFAULT_FETCH_MODE: 设置默认的提取模式。

     

  • 相关阅读:
    华为交换机S5700设置远程ssh telnet登录
    华为交换机S5700 vty 0 4
    OpenStack--Cinder(G版)中的volume type
    nova volume-create的使用
    druid监控配置
    2PC之JTA原理与实现
    线上服务内存OOM问题定位
    分布式系统事务一致性解决方案
    Spring MVC异常统一处理的三种方式
    Git回滚到历史节点(SourceTree篇)
  • 原文地址:https://www.cnblogs.com/weilingfeng/p/8946257.html
Copyright © 2011-2022 走看看