1.POD简介
PDO是php访问数据库的接口,PDO 提供了一个数据访问抽象层。可以使用多种数据库,多种数据库可以使用相同的函数或方法访问数据。
2.开启PDO
编辑 php.ini 文件,开启extension=php_pdo.dll扩展,开启对应的数据库扩展,比如:mysql数据库开启;extension=php_pdo_mssql.dll ;extension=php_pdo_mysql.dll扩展。
3.使用PDO连接mysql数据库
<?php
try{
//第一个参数为驱动,mysql是你对应的数据库类型,
//host=localhost对应数据库主机名
//dbname=podtest对应使用的数据库
//root对应数据库用户名
//""对应的密码
$pdo=new PDO("mysql:host=localhost;dbname=podtest;","root","");
}catch(PDOException $e){
die("数据库连接失败".$e->getMessage());
}
?>
4.PDO预定义常量
PHP PDO预定义常量 | 菜鸟教程 (runoob.com)
5.PDO预处理语句
用预处理语句进行重复插入
下面例子通过用 name 和 value 取代 ? 占位符的位置来执行一条插入查询。
<?php
//导入连接数据库
include("pdo.php");
try{
//数据添加预处理语句
$sql="insert into pod_student(name,sex,age,classid) value(?,?,?,?)";
$stmt=$pdo->prepare($sql);
//绑定参数 PDOStatement::bindParam — 绑定一个参数到指定的变量名(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
$stmt->bindParam(1,$name);
$stmt->bindParam(2,$sex);
$stmt->bindParam(3,$age);
$stmt->bindParam(4,$classid);
//赋予数据
$name='name11';
$sex='w';
$age=16;
$classid=4;
//添加数据
$ret=$stmt->execute();
//查看是否成功
var_dump($ret);
//赋予数据2
$name='name12';
$sex='v';
$age=17;
$classid=5;
//添加数据2
$ret=$stmt->execute();
//查看是否成功
var_dump($ret);
//使用数组的方式
$stmt->execute(array('name13','w',23,3));
//查看是否成功
var_dump($ret);
}catch(PDOException $e){
echo $e->getMessage();
}
?>
用预处理语句进行重复插入
下面例子通过用 name 和 value 替代相应的命名占位符来执行一个插入查询
<?php
//导入连接数据库
include("pdo.php");
try{
//数据添加预处理语句
$sql="insert into pod_student(name,sex,age,classid) value(:name,:sex,:age,:classid)";
$stmt=$pdo->prepare($sql);
//绑定参数
//PDOStatement::bindParam — 绑定一个参数到指定的变量名(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
$stmt->bindParam(":name",$name);
$stmt->bindParam(":sex",$sex);
$stmt->bindParam(":age",$age);
$stmt->bindParam(":classid",$classid);
//赋予数据
$name='name11';
$sex='w';
$age=16;
$classid=4;
//添加数据
$ret=$stmt->execute();
//查看是否成功
var_dump($ret);
//赋予数据2
$name='name12';
$sex='v';
$age=17;
$classid=5;
//添加数据2
$ret=$stmt->execute();
//查看是否成功
var_dump($ret);
//使用数组的方式
$arr=array("name"=>"name13","sex"=>"w","age"=>15,"classid"=>1);
$ret=$stmt->execute();
//查看是否成功
var_dump($ret);
}catch(PDOException $e){
echo $e->getMessage();
}
?>
用预处理查询数据
<?php
//导入连接数据库
include("pdo.php");
try{
//数据查询id大于某个值预处理语句
$sql="select * from pod_student where id>:id";
$stmt=$pdo->prepare($sql);
//获取id
$stmt->execute($_GET);
//设置返回为索引数组
//$user=$stmt->fetch(PDO::FETCH_ASSOC);
//设置返回为索引数组所有
//$user=$stmt->fetchAll(PDO::FETCH_ASSOC);
//输出
//var_dump($user);
//绑定变量
//PDOStatement::bindColumn — 绑定一列到一个 PHP 变量(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
$stmt->bindColumn(1,$id);
$stmt->bindColumn(2,$name);
$stmt->bindColumn(3,$sex);
$stmt->bindColumn(4,$age);
$stmt->bindColumn(5,$classid);
//遍历输出
while($stmt->fetch(PDO::FETCH_ASSOC)){
echo "--{$id}--{$name}--{$sex}--{$age}--{$classid}--<br>";
}
}catch(PDOException $e){
echo $e->getMessage();
}
?>
6.PDO事物处理
事物处理流程,开启事务,事物处理,处理成功保存,处理失败回滚数据库。
<?php
include("pdo.php");
try{
//关闭自动提交
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);
//开启事物
$pdo->beginTransaction();
//执行子流程
//子流程失败,则所有事物失败
//反之成功
$sql="UPDATE `pdo_one` SET price=price+10 where id=1 ";
$s=$pdo->exec($sql);
if(!$s){
throw new PDOException("进货失败");
}
$sql="UPDATE `pdo_one` SET price=price-10 where id=2 ";
$s=$pdo->exec($sql);
if(!$s){
throw new PDOException("出货失败");
}
//事务成功,提交事务
$pdo->commit();
echo '购买成功';
}catch(PDOException $e){
echo $e->getMessage();
//事物处理失败,回滚数据库
$pdo->rollback();
}
?>