一.安装
1.win下pdo的安装
在win下安装比较简单,只需要在php.ini中开启extension=php_pdo.dll和相应的驱动如extension=php_pdo_mysql.dll重启apache就行了。
2.在linux环境下安装
在安装php编译阶段加上--with-pdo-mysql=mysql的安装路径
二.详解pdo
从php手册中可以了解到pdo一共有三个类PDO类,PDOStratement类,PDOException类
1.PDO类
首先需要先实例化一个PDO对象
$pdo = new PDO('mysql:host=$host;dbname=$dbname','$username','$password');
$host 服务器地址
$dbname 数据库名称
$username 数据库用户名
$password 数据库密码
PDO对象的方法
1)执行sql语句的方法:$pdo->exec();//执行有影响行数的语句,update,delete,insert等写操作,返回所影响的行数。
$pdo->query();//执行有结果集的语句,select等读操作,返回一个PDOStatement对象。
$pdo->prepare();//执行所有语句,与PDOStatement对象一起使用,返回一个PDOStatement对象。
2)获取最后一次数据的自增ID
$pdo->lastInsertId();
3)事务,执行事物要保证数据库和PDO的自动提交处于关闭状态
$pdo->beginTrasaction();//开启事务
$pdo->commit();//提交事务
$pdo->callback;//事务回滚
4)PDO属性设置,查看
$pdo->setAttribute();//设置PDO属性
$pdo->getAttibute();//获取/显示PDO属性
$pdo->getAvailableDrivers();//获取/显示PDO驱动
5)错误提示,错误信息
$pdo->errorCode();//显示错误的代码,数字
$pdo->errorInfo();//显示错误信息,数组
PDO的错误级别分三种,可以在创建pdo对象是定义
默认 ERRMODE_SILENT 代号0 //错误发生时不进行任何提示
警告 ERRMODE_WARNING 代号 1 //警告信息
异常 ERRMODE_EXCEPTION 代号 2 //异常信息
2.PDOStatement对象,预处理对象
常规的mysql数据处理是每执行一条语句与服务器进行一次连接,而pdo是有预处理先在服务器创建一个预处理状态,然后把每一条语句作为预处理的参数来用,节省了服务器的开支。
1)准备一条语句
$stmt = $pdo->prepare(insert into test (title,content,date) value(':title',':content',':date'));
$stmt = $pdo->prepare(insert into test (title,content,date) value(?,?,?));
//PDOStatement是有PDO对象而来,prepare参数的写法有两种形式,第一种事占位符?相当于索引 数组 有一定的顺序性;第二种是名称参数 相当于关联数组 无顺序性
2)绑定参数
$stmt->bindParam(':title',$title);
$stmt->bindParam(':content',$content);
$stmt->bindParam(':date',$date);
或
$stmt->bindParam(1,$title);
$stmt->bindParam(2,$content);
$stmt->bindParam(3,$date);
也可以写成
$stmt->bindParam(array(':title'=>$title,':content'=>$content,':date'=>$date));
$stmt->bindParam(array($title,$content,$date));
3)执行语句,在执行之前也可以不绑定参数,而在执行时进行绑定如:$stmt->execute(array(':title'=>$title,':content'=>$content,':date'=>$date));
$stmt->execute();
4)获取结果集
$stmt->fetch();//获取一条记录混合了关联数组和索引数组,可以给定参数来规定是关联或是索引如$stmt->fetch(PDO::FETCH_ASSOC)也可以用$stmt->setFetchMode()来统一定义
$stmt->fetchAll();//获取所有记录
$stmt->fetchColumn();//获取字段
$stmt->rowCount();//获取总行数
$stmt->columnCount();//总字段数
例子:
$dsn="mysql:host=localhost;dbname=films";$pdo=new PDO($dsn,'root','');
$pdo->exec('set names utf8');
$sql="select * from images";
$stmt=$pdo->prepare($sql);
$stmt->execute();
if($stmt->rowCount()){
$r=$stmt->fetchall(PDO::FETCH_ASSOC);
foreach ($r as $v) {
echo $v['path']."<br/>";
}
}