PDO抽象数据层

2017-08-12  本文已影响31人  做梦枯岛醒

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

什么是PDO?

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

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暂时先记录这么多,在以后的学习中我会补充更多。

上一篇下一篇

猜你喜欢

热点阅读