• 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事务处理

  • 相关阅读:
    linux 命令——48 watch (转)
    linux 命令——47 iostat (转)
    linux 命令——46 vmstat(转)
    linux 命令——45 free(转)
    linux 命令——44 top (转)
    linux 命令——43 killall(转)
    linux 命令——42 kill (转)
    linux 命令——41 ps(转)
    linux 命令——40 wc (转)
    Java for LeetCode 068 Text Justification
  • 原文地址:https://www.cnblogs.com/52fhy/p/3969340.html
Copyright © 2020-2023  润新知