数据库抽象层 - PDO

数据库抽象层:

  在数据迁移和项目操作多数据库时,为了便于操作而提供一种的解决方案。

  当从一个数据库系统向另一个数据库系统迁移时,几乎不用更改太多的程序代码,如将MS SQL Server迁移到MySQL。

  代码规划必须规范,尽量使用相同的数据进行对象实例化,并且使用相同的数据库抽象层(如PDO)。这样只需要改变系统的配置文件即可迁移数据库。

  目前,使用PHP进行不同的数据库系统开发,这些系统很不相同,而许多数据库抽象层在PHP的层次有所不同,但彼此使用方法相当,它的发展无疑会提高开发效率。

常见的数据库抽象层:

  PDO,ADODB, Metabase,PEAR:DB, MySqli(mysql扩展组件)

PDO优点:

  PDO底层是c语言开发的,速度较快

  PDO简单易学(30多个函数-20个左右)

  PHP高版本中已经将PDO作为默认的数据库链接方式,而mysql_query即将被淘汰。

PDO的用法:

  PDO类: 用于操作数据库的基本命令  $pdo_object

  PDO Statement类: 对查询得到的结果集做操作的类  $pdo_statement

  PDO Exception类: PDO异常类

PDO配置和初始化:

  Php.ini 开启PDO: 重新apache

  Extension = php_pdo.dll

  Extension = php_pdo_mysql.dll

  $db = new PDO("库类型:host=?;dbname=?","用户名","密码");

          链接字符串(DSN)

  【PDO_connect.php】

<?php
$dsn = "mysql:host=localhost;dbname=thinkshop";
$user= "root";
$pwd = "";

try{
    $pdo = new PDO($dsn,$usr,$pwd);
}catch(PDOException $e){
    echo $e -> getMessage();
}
if($pdo instanceof PDO)
    echo "PDO connect ok";
else
    echo "PDO connect error";
?>

  查询操作:

    $pdo_statement = $pdo_object -> query("sql命令"):

      返回值:

    查询功能:  有记录返回-返回结果集   false

    插入/删除/修改 :返回 true  or  false

  获取结果集中数据为数组:

    $pdo_statement -> Fetch():转换一条记录为一维数组

    $pdo_statement -> FetchAll()转换所有记录为二维数组

  设置数组样式:

    $pdo_statement -> serFetchMode(模式)

      模式:

        PDO::FETCH_NUM:  索引数组

        PDO::FETCH_BOTH: 两种数组

        PDO::FETCH_ASSOC: 关联数组

  设置链接属性(大小写):

    $pdo_statement -> setAttribute(属性,值);

      属性:

        PDO::ATTR_CASE

      值:

        PDO::CASE_UPPER  大写

        PDO::CASE_LOWER 小写

  【pdo_statement.php】

<?php
$dsn = "mysql:host=localhost;dbname=thinkshop";
$user= "root";
$pwd = "";

try{
    $pdo = new PDO($dsn,$user,$pwd);
}catch(PDOException $e){
    echo $e -> getMessage();
}

$sql = "select * from students";
$result = $pdo -> query($sql);
$data = $result -> fetchAll();
print_r($data);

echo "<hr/>";

// 取出后结果集对象中数据不存在

$pdo -> setAttribute(PDO::ATTR_CASE,PDO::CASE_UPPER);  // key名大写
$result = $pdo -> query($sql);
$result -> setFetchMode(PDO::FETCH_ASSOC);
$data = $result -> fetch();
print_r($data);
?>

  修改,删除等无结果集返回的sql操作

    $pdo_object -> exec(sql语句);

    返回:  有记录影响,返回的是影响行数,无影响返回0;

  预加载处理: 一次加载多次执行.

    $pdo_statement = $pdo_object -> prepare(sql语句) : 预加载sql语句命令

    $pdo_statement-> execute(): 执行预加载命令

    $sql = "select * from  student where sid=:id& sname=:name";

?: 内存变量标示的统一符号。

:字符 -> 内存变量;

      $sql = "select * from  student where sid=:id& sname=:name"

      $pdo_statement->bindValue(":id",值)

      $sql = "select * from  student where sid=?& sname=?"

      $pdo_statement->bindValue(1,值)

      $pdo _statement -> bindParam(":id|数字",PHP变量);

时间: 2024-10-10 16:01:03

数据库抽象层 - PDO的相关文章

面向对象第七天----数据库抽象层PDO

php操作mysql方法:mysqlmysqliPDO 数据库抽象层--PDO (重点)======================================================================= 1. pdo的作用 pdo(php data object) 扩展类库,为PHP访问数据库提供了轻量级的,统一的接口.无论使用 什么数据库,都可以通过一致的函数执行查询和获取数据 优势: ① 对不同的数据库提供统一的操作方式 ② 对执行批量SQL效率高,对PHP操作S

PHP数据库抽象层--PDO(PHP Data Object) [一]

1.简介:(PDO数据库访问抽象层,统一各种 数据库的访问接口 ) PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口.实现 PDO 接口的每个数据库驱动可以公开具体数据库的特性作为标准扩展功能. 注意利用 PDO 扩展自身并不能实现任何数据库功能:必须使用一个 具体数据库的 PDO 驱动 来访问数据库服务. PDO 提供了一个 数据访问 抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据. PDO 不不提供 数据库 抽象层:它不会重写

《细说PHP》第四版 样章 第18章 数据库抽象层PDO 2

18.2  PDO所支持的数据库 使用PHP可以处理各种数据库系统,包括MySQL.PostgreSQL.Oracle.MsSQL等.但访问不同的数据库系统时,其所使用的PHP扩展函数也是不同的.例如,使用PHP的MySQL或MySQLi扩展函数,只能访问MySQL数据库:如果需要处理Oracle数据库,就必须安装和重新学习PHP中处理Oracle的扩展函数库,每种数据库都有对应的扩展函数,如图18-3所示.应用每种数据库时都需要学习特定的函数库,这样是比较麻烦的,更重要的是这使得数据库间的移植

数据库抽象层PDO

PDO(PHP Data Object),数据库访问抽象层,统一各种数据库的访问接口. PDO特性:编码一致性.灵活性.高性能.面向对象特性. PDO只是一个抽象的接口层,本身并不能操作数据库. 一.PDO安装与配置 1.配置PHP配置文件,开启相应扩展 extension = php_pdo.dll 2.开启响应数据库扩展 extension = php_pdo_mysql.dll 3.通过查看phpinfo可以看到PDO扩展的详细信息 二.PDO连接数据库 1.通过参数的形式连接数据库[建议

《细说PHP》第四版 样章 第18章 数据库抽象层PDO 1

现在,如果你已经能熟练地使用MySQL客户端软件来操作数据库中的数据,就可以开始学习如何使用PHP来显示和修改数据库中的数据了.PHP提供了标准的函数来操作数据库.在PHP 5以上的版本中可以使用MySQL和MySQLi两套扩展函数,MySQLi是PHP 5中新增的,是对MySQL扩展的改进.但由于历史遗留问题,很多老项目是在PHP 4时使用MySQL扩展开发的,如果在原有的项目上进行二次开发,或者找一些学习的例子,都要求开发人员会使用MySQL扩展函数.如果是新设计的项目,则推荐使用MySQL

《细说PHP》第四版 样章 第18章 数据库抽象层PDO 4

18.4  创建PDO对象 使用PDO在与不同数据库管理系统之间交互时,PDO对象中的成员的方法是统一各种数据库的访问接口,所以在使用PDO与数据库交互之前,首先要创建一个PDO对象.在通过构造方法创建对象的同时,需要建立一个与数据库服务器的连接,并选择一个数据库.PDO的构造方法原型如下: __construct ( string dsn [, string username [, string password [,   array driver_options]]] )        //

《细说PHP》第四版 样章 第18章 数据库抽象层PDO 8

18.6.4  执行准备好的查询 当准备好查询并绑定了相应的参数后,就可以通过调用PDOStatement类对象中的execute()方法,反复执行在数据库缓存区准备好的语句了.在下面的示例中,向前面提供的contactInfo表中使用预处理方式连续执行同一条INSERT语句,通过改变不同的参数添加两条记录,代码如下所示: 如果你只是要传递输入参数,并且有许多这样的参数要传递,那么,下面示例提供的快捷方式语法会非常有帮助.该示例通过在execute()方法中提供一个可选参数,该参数是由准备查询中

《细说PHP》第四版 样章 第18章 数据库抽象层PDO 7

18.6  PDO对预处理语句的支持 在生成网页时,许多PHP脚本通常都会执行除参数外其他部分完全相同的查询语句.针对这种重复执行一个查询,但每次迭代使用不同参数的情况,PDO提供了一种名为预处理语句(Prepared Statement)的机制,如图18-6所示.它可以将整个SQL命令向数据库服务器发送一次,以后如果参数发生变化,数据库服务器只需对命令的结构做一次分析就够了,即编译一次,可以多次执行.它会在服务器上缓存查询的语句和执行过程,只在服务器和客户端之间传输有变化的列值,以此消除额外的

《细说PHP》第四版 样章 第18章 数据库抽象层PDO 12

18.9  管理表books实例 在Web项目中,几乎所有模块都要和数据表打交道,而对表的管理无非就是增.删.改.查等操作,所以熟练掌握对表进行管理的这些常见操作是十分有必的.本例为了能更好地展示PDO的应用,并没有将数据表的操作封装成一个数据库操作类,而是采用了过程化的编写方式,用最直接的方式实现. 18.9.1  需求分析 本例主要的目标是实现对图书信息表books的管理过程,包括添加图书.修改图书.删除图书.遍历图书列表.搜索图书等操作.创建数据表books的SQL语句如下所示. 创建后,