1、PDO的介绍
PDO(PHP数据对象) 是一个轻量级的、具有兼容接口的PHP数据连接拓展,是一个PHP官方的PECL库,随PHP 5.1发布,需要PHP 5的面向对象支持,因而在更早的版本上无法使用。它所提供的数据接入抽象层,具有与具体数据库类型无关的优势,为它所支持的数据库提供统一的操作接口。由于PDO是在底层实现的统一的数据库操作接口,因而利用它能够实现更高级的数据库操作,比如存储过程的调度等。要使用PDO操作数据库,必须要有相应的dll文件。
2、创建PDO的实例
// 第一种方式,通过代码来配置
<?php
try{
$pdo = new PDO("mysql:host=localhost;dbname=test","root","hymmysql");
}catch(PDOException $e){
die("数据库连接失败".$e->getMessage());
}
print_r($pdo);
?>
// 第二种方式,通过自定义文件配置
<?php
try{
$pdo = new PDO("uri:mysqlPdo.ini","root","hymmysql");
}catch(PDOException $e){
die("数据库连接失败".$e->getMessage());
}
print_r($pdo);
?>
// 第三种方式,通过php.ini文件配置
// 在php.ini文件中:[PDO]pdo.dsn.mysqlpdo = "mysql:host=localhost;dbname=test";
<?php
try{
$pdo = new PDO("mysqlpdo","root","hymmysql");
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);// 设置属性
$pdo->getAttribute(PDO::ATTR_AUTOCOMMIT );// 获取属性
}catch(PDOException $e){
die("数据库连接失败".$e->getMessage());
}
print_r($pdo);
?>
3、PDO操作数据库
<?php
//1.连接数据库
try{
$pdo = new PDO("mysql:host=localhost;dbname=test","root","hymmysql");
}catch(PDOException $e){
die("数据库连接失败".$e->getMessage());
}
//2.执行query(查询)返回的是一个预处理对象
$sql = "select * from stu";
$stmt = $pdo->query($sql);// 记性查询语句
$list = $stmt->fetchAll(PDO::FETCH_ASSOC);// 介绍数据记录的方式
//3.解析数据(一次把所有的数据解析完)
foreach($list as $val){
echo $val['id']."-------".$val['name']."<br>";
}
//$sql = "insert into stu values(null,'oracle','w',44)";
//$sql = "delete from stu where id=11";
$sql = "update stu set name='js' where id=3";
$res = $pdo->exec($sql);// 直接执行sql语句
if($res){
echo "success";
}
//4.释放资源
$stmt = null;
$pdo = null;
?>
4、错误信息的处理
<?php
//默认是不提示的 需要用 errorCode() errorInfo()方法来获取
try{
$pdo = new PDO("mysql:host=localhost;dbname=<span style="font-family: Arial, Helvetica, sans-serif;">test</span><span style="font-family: Arial, Helvetica, sans-serif;">","root","");</span>
// 错误信息的三种模式
//$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);// 警告
//$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION );// 异常
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_SILENT);// 默认
}catch(PDOException $e){
die("数据库连接失败".$e->getMessage());
}
$sql = "insert into stuu values(null,'jike','w',55)";
// 设置了异常模式才能捕获异常
try{
$res = $pdo->exec($sql);
}catch(PDOException $e){
echo $e->getMessage();
}
/* if($res){
echo "OK";
}else{
//echo $pdo->errorCode();
//print_r($pdo->errorInfo());
} */
?>
5、预处理
1)?号式的预处理句,一共有3种方式
<?php
//1.连接数据库
try{
$pdo = new PDO("mysql:host=localhost;dbname=test","root","");
}catch(PDOException $e){
die("数据库连接失败".$e->getMessage());
}
//2.预处理的SQL语句
$sql = "insert into stu(id,name,sex,age) values(?,?,?,?)";
$stmt = $pdo->prepare($sql);
//3.对?号的参数绑定
//(第一种绑定方式)
$stmt->bindValue(1,null);
$stmt->bindValue(2,'test55');
$stmt->bindValue(3,'w');
$stmt->bindValue(4,22);
//第二种绑定方式
$stmt->bindParam(1,$id);
$stmt->bindParam(2,$name);
$stmt->bindParam(3,$sex);
$stmt->bindParam(4,$age);
$id=null;
$name="test66";
$sex="m";
$age=33;
//第三种绑定方式
$stmt->execute(array(null,'test77','22',55));
//4.执行
$stmt->execute(<span style="font-family: Arial, Helvetica, sans-serif;">$stmt</span><span style="font-family: Arial, Helvetica, sans-serif;">);</span>
echo $stmt->rowCount();
2)别名式的预处理句,一共有3种方式
<?php
//1.连接数据库
try{
$pdo = new PDO("mysql:host=localhost;dbname=test","root","");
}catch(PDOException $e){
die("数据库连接失败".$e->getMessage());
}
//2.预处理的SQL语句
$sql = "insert into stu(id,name,sex,age) values(:id,:name,:sex,:age)";
$stmt = $pdo->prepare($sql);
//3.对?号的参数绑定
//(第一种绑定方式)
$stmt->bindValue("id",null);
$stmt->bindValue("name",'ceshi1');
$stmt->bindValue("sex",'w');
$stmt->bindValue("age",22);
//第二种绑定方式
$stmt->bindParam("id",$id);
$stmt->bindParam("name",$name);
$stmt->bindParam("sex",$sex);
$stmt->bindParam("age",$age);
$id=null;
$name="ceshi2";
$sex="m";
$age=33;
//第三种绑定方式
$stmt->execute(array("id"=>null,"name"=>"ceshi3","sex"=>"w","age"=>66));
<pre name="code" class="php">$stmt->execute(<span style="font-family: Arial, Helvetica, sans-serif;">$stmt</span><span style="font-family: Arial, Helvetica, sans-serif;">);</span>
echo $stmt->rowCount();
<?php
//1.连接数据库
try{
$pdo = new PDO("mysql:host=localhost;dbname=test","root","");
}catch(PDOException $e){
die("数据库连接失败".$e->getMessage());
}
//2.预处理的SQL语句
$sql = "select id,name,sex,age from stu";
$stmt = $pdo->prepare($sql);
//3.执行
$stmt->execute();
$stmt->bindColumn(1,$id);
$stmt->bindColumn(2,$name);
$stmt->bindColumn("sex",$sex);
$stmt->bindColumn("age",$age);
// 采用与处理方式遍历数据
while($row=$stmt->fetch(PDO::FETCH_COLUMN)){
echo "{$id}:{$name}:{$sex}:{$age}<br>";
}
// 普通方式遍历数据
foreach($stmt as $row){
echo $row['id']."--------".$row['name']."<br>";
}
6、事务的处理
<?php
//采用预处理+事务处理执行SQL操作
//1.连接数据库
try{
$pdo = new PDO("mysql:host=localhost;dbname=jikexueyuan","root","");
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
die("数据库连接失败".$e->getMessage());
}
//2.执行数据操作
try{
$pdo->beginTransaction(); //开启事物
$sql = "insert into stu(id,name,sex,age) values(?,?,?,?)";
$stmt = $pdo->prepare($sql);
//传入参数
$stmt->execute(array(null,"test4","w",11));
$stmt->execute(array(null,"test5","w",11));
$stmt->execute(array(null,"test3","w",11));
$pdo->commit(); //提交事物
}catch(PDOException $e){
die("执行失败".$e->getMessage());
$pdo->roolback();// 进行事务回滚
}