美文网首页
PDO抽象数据层

PDO抽象数据层

作者: 做梦枯岛醒 | 来源:发表于2017-08-12 19:58 被阅读31次

在进度落后的项目中增加人手只会导致进度更加落后。
----Fred Brooks

什么是PDO?

PDO全称Php Data Object(php数据对象),他是一个支持丰富数据库的访问接口,也就是说,有了PDO,我们不必要使用php提供的相关函数来访问数据库,而是通过PDO提供的接口来访问

PDO的特点

  • PDO是一个数据库访问抽象层,作用是统一各种数据库的访问接口,PDO相比其他方式来说更高效。
  • PDO通过轻巧,清晰,方便的函数,统一数据库操作
  • PDO吸取数据库交互的教训,结合Php5的新特性,来进行方便的数据库操作
  • PDO是模块化的,能够在需要的时候为用户数据库后端加载驱动程序,而不必重新编译或安装整个应用程序

下面我们直接进行pdo的使用(注意这里我用的新版的php,所以默认为开启状态,否则需要更改配置php.ini),具体的配置情况我们可以通过phpinfo()查看

链接数据库

//数据库种类
$dbms = 'mysql';
//数据库名
$dbname = "surine";
//主机
$host = 'localhost';
//配置dsn参数(可以看到格式比较奇怪)
$dsn = "$dbms:host=$host;dbname = $dbname";
try {
   //进行链接
    $pdo = new PDO($dsn, "root", "");
    echo "MySql链接成功";
} catch (Exception $e) {
    echo "错误日志".$e->getMessage();
}

这里PDO构造是接受4个参数,第4个是访问配置选项,暂时不考虑

SQL语句

PDO中可以通过3种方法来执行SQL语句

1.exec()

通过这个函数来执行一些语句,来实现对数据库的操作

try {
    $pdo = new PDO('mysql:host=localhost;dbname=surine', "root", "");
    echo "MySql链接成功";
    $aff = $pdo->exec("delete from users WHERE user = '1'");
    echo "输出数据,影响行数".$aff;
} catch (Exception $e) {
    echo "错误日志".$e->getMessage();
}

这里细心的读者会发现我修改了连接方式,采用 直接写语句的方式把数据库种类,主机名称等传进去,这是因为如果不这么写可能出现找不到数据库的情况,那么当然我们的数据也就没法操作了,如果你遇到显示不了数据的情况,可以采用这种写法,如果不行,可以使用

$pdo->errorInfo()

这个方法来检查错误信息

再比如说,插入数据

 $aff = $pdo->exec("insert into users(user,pswd) values('mt','123456')");
2.query()

query方法返回执行结果后的PDO结果集,那么他的参数也是一个sql语句,下面我们演示一下访问表的例子

 $query="select * from users";//需要执行的sql语句
 $arr = $pdo->query($query)->fetchAll();
    foreach ($arr as $var){
        echo "账号".$var['user'];
        echo "密码".$var['pswd']."<br>";
    }

那么我们可以看到,我们用 $pdo->query($query)查询数据,并且使用fetchAll方法,将查询到的数据转化格式,最后使用foreach语句进行打印

3.prepare()和execute()

这是PDO的预处理语句里包含的方法,首先通过prepare()方法查询准备工作,通过execute来执行查询,下面是一个演示

  $query="select * from users";//需要执行的sql语句
    $res=$pdo->prepare($query);//准备查询语句
    $res->execute();
    $result=$res->fetchAll(PDO::FETCH_ASSOC);
        foreach ($result as $var){
        echo "账号".$var['user'];
        echo "密码".$var['pswd']."<br>";
    }

这样的打印结果和上面的一致

4.fetch() , fetchAll()

终于说到fetch这里了,在前面用到很多次fetchAll方法
fetch()方法用于获取结果集里的下一行
那么fetchAll就是所有行,他们的返回值是一个array

这里还有一个fetchColumn()方法,是获取某一行,那么传入的参数就是一个int值

错误处理

我们使用errorcode()方法获取错误码,也可以使用errorInfo()方法获取详细信息,通过这些信息,我们可以得到,代码出现了什么错误。

事务处理

事务是保证操作正确进行的一大解决方法,那么PDO也是支持事务的。那么事务分为几个部分。

//开启事务 
    $pdo->beginTransaction();  
//提交事务
    $pdo->commit();  
//事务回滚
 $pdo->rollBack(); 

那么比如说我们添加一条信息到数据库,如果添加失败,防止其产生影响,那么我们可以用回滚来撤销更改,下面是一个例子

try {
    $pdo = new PDO('mysql:host=localhost;dbname=surine', "root", "");
    echo "MySql链接成功";

    $pdo->beginTransaction();  //开启事务
    $query="insert users(user,pswd)values('this','this')";//需要执行的sql语句
    $res=$pdo->prepare($query);//准备查询语句
    $res->execute();
    if($res){
        echo "添加数据成功";
    }else{
        echo "添加数据失败";
    }
    $pdo->commit();  //数据提交

} catch (Exception $e) {
    $pdo->rollBack();  //数据回滚
    echo "错误日志".$e->getMessage();
}

可以看到,我们写了一个添加语句,然后开启了事务,在执行语句后,提交事务,如果发生问题,我们在catch里也有回滚的操作。

总结

关于PDO暂时先记录这么多,在以后的学习中我会补充更多。

相关文章

  • PDO抽象数据层

    在进度落后的项目中增加人手只会导致进度更加落后。----Fred Brooks 什么是PDO? PDO全称Php ...

  • PDO学习

    PDO(PHP Data Object),数据库访问抽象层,统一各种数据库的访问接口。 一、PDO连接数据库 1、...

  • PDO

    PDO:php数据抽象层操作数据库,简单理解就是一个用于操作数据库的对象; pdo原理 PDO主要分为三大类: P...

  • PDO数据库抽象层

    第一章PDO扩展 ---------------1-PDO接触概念----------------------- ...

  • php PDO

    PDO 数据库抽象层 PDODSN : 数据库类型:dbname=库名;host=主机名/IP地址;charse...

  • pdo类

    pdo类PDO是一个“数据库访问抽象层”,作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,...

  • linux/Windows下如何安装PHP的PDO扩展

    PHP 数据对象PDO扩展为PHP访问数据库定义了一个轻量级的一致接口。PDO 提供了一个数据访问抽象层,这意味着...

  • pdo学习笔记

    pdo是什么 pdo为php访问各种不同数据库提供了轻量级的一致性的接口,他是在php和数据库之间的一个抽象连接层...

  • 了解PDO

    1、pdo的概念 PDO全称:PHP Data Object ( php 数据对象 )是一系列PHP类,抽象...

  • 【php:函数参考】数据库扩展

    数据库抽象层 ODBC PDO 连接与连接管理 事务与自动提交 预处理语句与存储过程 //绑定参数, 防止 sql...

网友评论

      本文标题:PDO抽象数据层

      本文链接:https://www.haomeiwen.com/subject/hhtrrxtx.html