您的位置:首页 > 编程语言 > PHP开发

PHP数据对象模型(PDO)

2016-07-07 21:16 561 查看
     
参考网址(PHP官网)

      虽然在php中有很多种数据库系统的扩展,但是不同的数据库系统对应的函数又是不同的,就拿MYSQL数据库系统而言,PHP就提供了Mysql和,Mysqli两种扩展,有没有一组统一的扩展标准来使不同的数据库系统都能使用呢?

   PDO就能实现这样的功能,PHP 数据对象 (PDO)
扩展为PHP访问数据库定义了一个轻量级的一致接口。实现 PDO 接口的每个数据库驱动可以公开具体数据库的特性作为标准扩展功能。 注意利用 PDO 扩展自身并不能实现任何数据库功能;必须使用一个 具体数据库的 PDO 驱动来访问数据库服务。

   PDO 提供了一个数据访问
抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。 PDO不提供数据库 抽象层;它不会重写 SQL,也不会模拟缺失的特性。如果需要的话,应该使用一个成熟的抽象层。
从 PHP 5.1 开始附带了 PDO,在 PHP 5.0 中是作为一个 PECL 扩展使用。 PDO 需要PHP 5 核心的新 OO 特性,因此不能在较早版本的 PHP 上运行。
  1.创建一个表示数据库连接的 PDO 实例(PDO::__construct)
       创建一个PDO的参数一共是四个:dsn,username,password,driver_options;
      dsn是连接数据的一些信息,包括所使用的数据库系统类型,具体使用的哪个数据库,数据库服务器所在打端口号,支持的字符集等等和数据库信息相关的内容;username和password就是访问数据库的用户名和密码;driver_options是和数据库连接方面的设置有关的属性;具体的创建代码可以参考第一行的PHP官网里的示例代码。在示例代码中,如果试图连接到请求的数据库失败,则PDO::__construct
抛出一个 PDO异常 。 在连接成功的时候,会返回一个PDO对象,我们可以通过var_dump( )打印一下他的返回值,如果不为空则说明我们是连接成功了的,为了节约连接通道,我们在不使用数据库可以通过给你实例化的PDO对象赋值为NULL进行销毁。
   2.PDO常用的一些函数
       成功创建连接实例后,我们就可以通过pdo对象对数据库进行操作了(假设我们是通过$mypdo接收的PDO的连接实例):
            1. $mypdo->query($sql )  对数据库执行查询的sql语句,返回一个PDOStatement对象。
            2. $mypdo->exec($sql)   对数据库执行DML(操作类,比如增删改)sql语句,返回一个受影响的行数(int)。
            3. $mypdo->prepare($sql,array($val))  对数据库执行一条预处理的sql语句,第二个参数必须是数组,简单示例
                 

$sql = 'update myshoppingcar set snum=? where uid=? and bid=?';
$mypdo->prepare($sql,array(1,1,1));

         通过这个函数,我们在某些场合可以节省很多多次不同操作的时间,还可以防止SQL注入的攻击,在数组中,我们也可以给元素的值写上索引,如果 没有索引,那么数组里的值就是和预处理sql语句里所需的值一一对应。
         在执行了query或者prepare函数后我们要对返回的PDOStatement进行处理,我们要把里面的数据通过我们需要的形式提取出来(假设我们是用$infos接收返回的PDOStatement对象)
            1. $infos->fetch( ) 从结果集中获取下一行(结果集中都是从第零行开始的),他一共有三个参数:
             fetch_style,cursor_orientation,offset  其中常用的是第一个参数,它必须是PDO::FETCH_* 系列常量中的一个,默认是PDO::FETCH_BOTH,在PHP官网对其也有说明,不过是英文的,英文好的同志可以直接参考官网fetch_style ,下面是翻译版:
<span style="font-family:Microsoft YaHei;background-color: transparent;">fetch_Style </span>控制下一行如何返回给调用者。此值必须是 PDO::FETCH_* 系列常量中的一个,缺省为 PDO::ATTR_DEFAULT_FETCH_MODE 的值 (默认为 PDO::FETCH_BOTH )。

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

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

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

4. PDO::FETCH_CLASS:返回一个请求类的新实例,映射结果集中的列名到类中对应的属性名。如果 fetch_style 包含 PDO::FETCH_CLASSTYPE(例如:PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE),则类名由第一列的值决定

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

6. PDO::FETCH_LAZY:结合使用 PDO::FETCH_BOTH 和 PDO::FETCH_OBJ,创建供用来访问的对象变量名

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

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



          2.$infos->fetchAll( ) 他的第一个参数和fetch相同也是fetch_style,它是返回一个包含结果集中所有行的数组(二维数组)
          3.$infos->fetchObject( ) 他的第一个参数是一个类名,如果不写默认是一个名为stdClass的标准类,如果写了类名,那么 
              这个类就必须定义,这个函数是获取下一行并作为一个对象返回
   在PHP购物车的功能块中这些方法都被封装在了Mypdo的操作类中去了,这样就显得尤为方便了。

         
   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PHP pdo pdo常用函数