码迷,mamicode.com
首页 > 数据库 > 详细

数据库抽象层 - PDO

时间:2017-05-24 20:19:59      阅读:325      评论:0      收藏:0      [点我收藏+]

标签:语句   color   执行   解决   bin   logs   默认   mysq   ado   

数据库抽象层:

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

  当从一个数据库系统向另一个数据库系统迁移时,几乎不用更改太多的程序代码,如将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变量);

           

数据库抽象层 - PDO

标签:语句   color   执行   解决   bin   logs   默认   mysq   ado   

原文地址:http://www.cnblogs.com/shuo-128/p/6900699.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!