zoukankan      html  css  js  c++  java
  • PHP面向对象07_PDO


    oop007复习

    2014-9-4 9:42:28

    摘要:

    1、pdo的作用
    2、pdo的安装
    3、pdo连接属性设置
    4、pdo对象和PDOStatement对象
    5、pdo预处理
    6、pdo事务机制

    1、pdo的作用

    简介:
    PDO(php data object)扩展类库为php访问数据库定义了轻量级的、一致性的接口,它提供了一个数据库访问抽象层.
    这样,无论你使用什么数据库,都可以通过一致的函数执行查询和获取数据.
    PDO大大简化了数据库的操作并能够屏蔽不同数据库之间的差异.
    使用pdo可以很方便地进行跨数据库程序的开发,以及不同数据库间的移植,是将来php在数据库处理方面的主要发展方向.
    它可以支持mysql,postgresql,oracle,mssql等多种数据库.

    举例说明:
    假如我们做了个项目,使用的是mysql,如果是面向过程操作数据库,那么,基本上所有的数据库函数都是mysql_形式.
    现在我们突然要换数据库了,比如pgsql.而pgsql数据库函数基本是pg_形式.
    并且二者部分函数是互相不存在的,都有各自的"扩展函数".
    那么这时候改项目就比较复杂了.

    但是如果我们使用的是pdo操作数据库,一切都简单了.
    使用mysql,我们只需在连接的时候这样定义:

    $m=new PDO("mysql:host=localhost;dbname=test","root","123");

    使用pgsql,我们只需在连接的时候这样定义:

    $m=new PDO("pgsql:host=localhost;port=5432;dbname=test","postgres","123");

    其它的操作都是一样的,比如查询都是$stmt=$m->query($sql),遍历都是$stmt->fetchAll();
    一切都变简单了.PDo还提供了预处理和事务支持.

    2、pdo的安装

    [windows环境]
    01) 编辑php.ini文件:

    extension=php_pdo.dll
    extension=php_pdo_mysql.dll

    02)重启apache服务:

    httpd –k restart

    03)打开phpinfo.php查看是否有pdo、pdo_mysql

    [Linux环境(CentOS6.0)]
    一般步骤是:

    1 tar -zxvf PDO_MYSQL-1.0.2.tgz
    2 cd PDO_MYSQL-1.0.2
    3 /usr/local/php/bin/phpize
    4 ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql
    5 make
    6 make install

    编辑php.ini,添加
    注:$ext_dir为扩展目录名字,例如no-debug-zts-20060613

    extension_dir=/usr/local/php/lib/php/extensions/$ext_dir
    extension=pdo_mysql.so

    然后重启服务器即可.

    3、pdo连接属性设置

    *连接数据库格式:

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

    01)连接mysql

    $m=new PDO("mysql:host=localhost;dbname=test","root","123");

    02)连接pgsql

    $m=new PDO("pgsql:host=localhost;port=5432;dbname=test","postgres","123");

    03)连接Oracle

    $m=new PDO("OCI:dbname=accounts;charset=UTF-8", "scott", "tiger"); 

    *不过,一般都是采用异常处理方式连接,例如 :

    try{
      $m=new PDO("mysql:host=localhost;dbname=test","root","123");
      }catch(PDOException $e){
      die('数据库连接失败:' . $e->getMessage());
    }

    *PDO与连接有关的选项

    PDO::ATTR_ERRMODE
    PDO::ERRMODE_SILENT 0    忽略错误模式
    PDO::ERRMODE_WARNING 1    警告级别模式
    PDO::ERRMODE_EXCEPTION 2    异常处理模式
    PDO::ATTR_AUTOCOMMIT
      0 //关闭自动提交
      1 //开启自动提交
    PDO::ATTR_DEFAULT_FETCH_MODE 
    PDO::FETCH_ASSOC 2
    PDO::FETCH_NUM 3
    PDO::FETCH_BOTH 4
    PDO::FETCH_OBJ 5


    例如:

    $option=array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION);
    $m=new PDO("mysql:host=localhost;dbname=test","root","123",$option);

    或者更通用的设置属性方式:

    $m->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//设置异常处理方式
    $m->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);//设置默认关联索引遍历

    常见PDO属性输出:

    echo "
    PDO是否关闭自动提交功能:". $m->getAttribute(PDO::ATTR_AUTOCOMMIT);
    echo "
    当前PDO的错误处理的模式:". $m->getAttribute(PDO::ATTR_ERRMODE); 
    echo "
    表字段字符的大小写转换: ". $m->getAttribute(PDO::ATTR_CASE); 
    echo "
    与连接状态相关特有信息: ". $m->getAttribute(PDO::ATTR_CONNECTION_STATUS); 
    echo "
    空字符串转换为SQL的null:". $m->getAttribute(PDO::ATTR_ORACLE_NULLS); 
    echo "
    应用程序提前获取数据大小:".$m->getAttribute(PDO::ATTR_PERSISTENT); 
    echo "
    与数据库特有的服务器信息:".$m->getAttribute(PDO::ATTR_SERVER_INFO); 
    echo "
    数据库服务器版本号信息:". $m->getAttribute(PDO::ATTR_SERVER_VERSION);
    echo "
    数据库客户端版本号信息:". $m->getAttribute(PDO::ATTR_CLIENT_VERSION);

    *字符集设置
    设置php连接mysql时的客户端字符串和连接字符串集为:

    $pdo->exec("set names utf8");

    或者:

    $pdo->query("set names utf8");

    4、PDO对象和PDOStatement对象

    01)pdo对象中的成员方法

    1.PDO::beginTransaction — 启动一个事务
    2.PDO::commit — 提交一个事务
    3.PDO::__construct — 创建一个表示数据库连接的 PDO 实例
    4.PDO::errorCode — 获取跟数据库句柄上一次操作相关的 SQLSTATE
    5.PDO::errorInfo — 获取错误信息
    6.PDO::exec — 执行一条 SQL 语句,并返回受影响的行数
    7.PDO::getAttribute — 取回一个数据库连接的属性
    *8.PDO::getAvailableDrivers — 返回一个可用驱动的数组(了解即可)
    *9.PDO::inTransaction — 检查是否在一个事务内(了解即可)
    10.PDO::lastInsertId — 返回最后插入行的ID或序列值
    11.PDO::prepare — 创建SQL的预处理,返回PDOStatement对象
    12.PDO::query — 用于执行查询SQL语句,返回PDOStatement对象
    13.PDO::quote — 为sql字串添加单引号
    14.PDO::rollBack — 回滚一个事务
    15.PDO::setAttribute — 设置属性


    pdo::query()方法
    当执行返回结果集的select查询时,或者所影响的行数无关紧要时,应当使用pdo对象中的query()方法.
    如果该方法成功执行指定的查询,则返回一个PDOStatement对象.
    如果使用了query()方法,并想了解获取数据行总数,可以使用PDOStatement对象中的rowCount()方法获取

    pdo::exec()方法
    当执行insert,update,delete没有结果集的查询时,使用pdo对象中的exec()方法去执行.
    该方法成功执行时,将返回受影响的行数.注意,该方法不能用于select查询.

    -------------------------------------------------------------------------------------------
    示例:

    <?php
    try{
      $m=new PDO("mysql:host=localhost;dbname=test","root","123");
    }catch(PDOException $e){
      die('数据库连接失败:' . $e->getMessage());
    }
    
    $stmt=$m->query("select * from stu");//返回PDOStatement对象$stmt
    echo $stmt->rowCount();
    ?>

    -------------------------------------------------------------------------------------------


    02)PDOStatement对象中的成员方法

    1.PDOStatement::bindColumn — 绑定一列到一个 PHP 变量(*)
    2.PDOStatement::bindParam — 绑定一个参数到指定的变量名(*)
    3.PDOStatement::bindValue — 把一个值绑定到一个参数(*)
    4.PDOStatement::closeCursor — 关闭游标,使语句能再次被执行。
    5.PDOStatement::columnCount — 返回结果集中的列数
    6.PDOStatement::debugDumpParams — 打印一条 SQL 预处理命令
    7.PDOStatement::errorCode — 获取跟上一次语句句柄操作相关的 SQLSTATE(*)
    8.PDOStatement::errorInfo — 获取跟上一次语句句柄操作相关的扩展错误信息(*)
    9.PDOStatement::execute — 执行一条预处理语句(*)
    10.PDOStatement::fetch — 从结果集中获取下一行(*)
    11.PDOStatement::fetchAll — 返回一个包含结果集中所有行的数组(*)
    12.PDOStatement::fetchColumn — 从结果集中的下一行返回单独的一列。
    13.PDOStatement::fetchObject — 获取下一行并作为一个对象返回。
    14.PDOStatement::getAttribute — 检索一个语句属性(*)
    15.PDOStatement::getColumnMeta — 返回结果集中一列的元数据
    16.PDOStatement::nextRowset — 在一个多行集语句句柄中推进到下一个行集
    17.PDOStatement::rowCount — 返回受上一个 SQL 语句影响的行数(*)
    18.PDOStatement::setAttribute — 设置一个语句属性(*)
    19.PDOStatement::setFetchMode — 为语句设置默认的获取模式。

    注:(*)表示必须会使用的方法.


    5、pdo预处理

    准备一条SQL语句使用PDOStatement::execute()方法执行.
    预处理SQL语句可以使用包含零或多个命名为(:name)或者以?号标记为(?)的形式.例如

    $stmt=$m->prepare("insert into stu(name,age,sex,classid)values(?,?,?,?)");
    $stmt=$m->prepare("insert into stu(name,age,sex,classid)values(:name,:age,:sex,:classid)");

    预处理的好处是可以防止SQL注入、更快执行效率支持批量操作.

    *详见 PDO预处理

    6、pdo事务机制

    概要:将多条sql操作(增删改)作为一个操作单元,要么都成功,要么都失败.
    单条数据不用事务处理

    *详见 PDO事务处理

  • 相关阅读:
    JQuery基础知识--方便忘记时查看
    关于jquery.validate.js的用法
    JQuery ajax提交表单及表单验证
    thinkphp rabc权限总结
    关于jquery ajax项目总结
    中国剩余定理及其拓展 CRT&EXGCD
    bzoj 4899 记忆的轮廓 题解(概率dp+决策单调性优化)
    bzoj3307 雨天的尾巴题解及改题过程(线段树合并+lca+树上差分)
    20190614考试心态爆炸记
    fhq Treap(无旋Treap)
  • 原文地址:https://www.cnblogs.com/52fhy/p/3969340.html
Copyright © 2011-2022 走看看