PDO详解

一、PDO诞生的意义

PHP对数据库支持的抽象度不够,接口不统一。每一种数据库环境都必须重新定义数据库的操作。在这种背景下,统一操作接口PDO诞生了。

在PHP中,有三种数据库连接方式:

(1)mysql 最常用,过程式风格的一种应用

(2)mysqli,mysql函数的增强版,提供面向对象和过程两种风格的API,增加了预编译和参数绑定等新的特性

(3)PDO统一抽象接口,更类似于mysqli

 

二、PDO常用函数

PDO中包含三个预定义类:PDO、PDOStatement和PDOException

(1)PDO类中的常用方法有:

beginTransaction():开启事务机制

commit():提交事务

exec():执行一条SQL语言并返回影响的行数

prepare():为执行准备一条SQL语句,返回语句执行后的联合结果集

query():执行一条SQL语句并返回一个结果集

rollBack():回滚一个事务

getAttribute():获取一个数据库连接属性

setAttribute():设置一个数据库连接属性

 

(2)PDOStatement类中常用方法有:

bindParam():绑定一个PHP变量到一个预处理语句中的参数

execute():执行一条预处理语句

fetch():从结果集中取出一行

fetchAll():从结果集中取出一个包含所有行的数组

fetchColumn():返回结果集中某一列的数据

 

(3)PDOException是对exception类的简单重写,这里不作介绍

 

 

三、PDO的简单使用

1.在windows系统下,开启PDO需要在php.ini中将

;extension=php_pdo_mysql.dll

前面的分号去掉,如果使用的数据库不是mysql,则将对应的数据库扩展配置前面的分号去掉

在linux或者ngnix系统下,开启PDO也需要在php配置文件中将对应的拓展前的注释符号去掉。

 

2.在数据库中建立test数据库和一张test表,如下图所示

 

在服务器目录下新建一个php脚本如下:

<?php

try{

//配置数据源,数据库服务器IP和数据库名

$dsn="mysql:host=127.0.0.1;dbname=test";

$db=new PDO($dsn,"root","");


//设置异常可捕获

$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

 

$db->exec("set names utf8");

//插入新数据

$sql="insert into test(name) values('HeCheng')";

$db->exec($sql);

 

}catch(PDOException $err){

echo $err->getMessage();

}

?>

结果如下:

 

三、PDO预编译和参数绑定

预编译:

<?php

try{

//数据库地址,数据库,数据库账户和密码

$dsn="mysql:host=127.0.0.1;dbname=test";

$db=new PDO($dsn,"root","");

 

$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

$insert=$db->prepare("insert into test(name) values(?);");

//插入

$insert->execute(Array("HeChengLei"));

 

//异常语句

//$insert->execute(Array("ZhangJun","1983-09-21"));

 

//查找

$select=$db->prepare("select * from test");

$select->execute();

var_dump($select->fetchAll(PDO::FETCH_ASSOC));

 

}catch(PDOException $err){

echo $err->getMessage();

}

?>

 

结果:

 

 

参数绑定:

<?php

$name='HeCheng';

$dsn="mysql:host=127.0.0.1;dbname=test";

 

$db=new PDO($dsn,"root","");

 

//用?代替param

$sth=$db->prepare("select * from test where name=?");

//参数绑定

$sth->bindParam(1,$name,PDO::PARAM_STR,12);

$sth->execute();

var_dump($sth->fetchAll(PDO::FETCH_ASSOC));

 

//用:param代替param

$sth=$db->prepare("select * from test where name=:name");

$sth->bindParam(':name',$name,PDO::PARAM_STR,12);

$sth->execute();

var_dump($sth->fetchAll(PDO::FETCH_ASSOC));

?>

 

结果:

 

PDO最大的特点就是引入了预编译和参数绑定,二者的关系其实就是同一件事情的不同阶段,参数绑定使用bindParam()函数传入参数。

<textarea autofocus="" style="width:1px;height:1px">.</textarea>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值