首页 > 代码库 > pdo的使用

pdo的使用

PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。

PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。

PDO随PHP5.1发行,在PHP5.0的PECL扩展中也可以使用,无法运行于之前的PHP版本。

 

pdo功能:

1.操作其它数据库
2.事务功能
3.防止SQL注入攻击

 

 

操作其他数据库:

//造PDO对象
$dsn = "mysql:dbname=mydb;host=localhost"; //数据源
$pdo = new PDO($dsn,"root","123");   //root为连接用户名,123为密码

//写SQL语句
$sql = "select * from nation";
$sql1 = "insert into nation values(‘n077‘,‘数据‘)";

//执行,返回的是PDOStatement对象
$a = $pdo->query($sql); //执行查询
$a1 = $pdo->exec($sql1); //执行其他语句

var_dump($a);
var_dump($a1);

$arr = $a->fetchAll(PDO::FETCH_BOTH);  //遍历输出
var_dump($arr);

  

事务功能:

事务:能够控制语句同时成功同时失败,失败时可以回滚:

$dsn = "mysql:dbname=mydb;host=localhost";
$pdo = new PDO($dsn,"root","123");

//设置异常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 

try
{
	//开启事务
	$pdo ->beginTransaction(); 
	
	//......中间部分为数据库代码及执行
	
	//提交
	$pdo->commit();
}
catch(Exception $e)
{
	//抓住try里面出现的错误,并且处理
	//echo $e->getMessage(); //获取异常信息
	echo "失败! ";
	//回滚
	$pdo->rollBack();
}
//final()
//{
	//最终执行,无论以上try代码有没有出错,都会执行
//}

  

 

如果cath()中有失败语句,则回到开启事务时的状态。

 

防止SQL注入攻击:

索引方法:

//预处理语句防止SQL注入
$dsn = "mysql:dbname=mydb;host=localhost";
$pdo = new PDO($dsn,"root","123");

//$code = "n005";

//SQL语句里面需要加占位符 ?
//$sql = "select * from nation where code=?";
$sql = "insert into nation values(?,?)";

//准备执行,返回PDOStatement对象
$st = $pdo->prepare($sql);

//调用绑定参数的方法来绑定参数
//$st->bindParam(1,$code);
//$st->bindParam(2,$name);
//$name = "测试1";

//索引数组
$attr = array("n006","测试2");

//执行方法
$st->execute($attr);

//$attr = $st->fetchAll();

//var_dump($attr);

  

关联方法:

$dsn = "mysql:dbname=mydb;host=localhost";
$pdo = new PDO($dsn,"root","123");

//占位符是字符串
$sql = "insert into nation values(:code,:name)";

$st = $pdo->prepare($sql);
//$st->bindParam(":code",$code,PDO::PARAM_STR);
//$st->bindParam(":name",$name,PDO::PARAM_STR);
//$code = "n007";
//$name = "测试3";

//关联数组
$attr = array("code"=>"n008","name"=>"测试4");

$st->execute($attr);

  

 

利用关联方法向数据库添加数据:

新建添加php文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
<form action="addchuli.php" method="post">
	<div>代号:<input type="text" name="code" /></div>
    <div>名称:<input type="text" name="name" /></div>
    <input type="submit" value="http://www.mamicode.com/添加" />
</form>
</body>
</html>

 

处理界面:

<?php
$dsn = "mysql:dbname=mydb;host=localhost";
$pdo = new PDO($dsn,"root","123");

//占位符是字符串
$sql = "insert into nation values(:code,:name)";

$st = $pdo->prepare($sql);
//$st->bindParam(":code",$code,PDO::PARAM_STR);
//$st->bindParam(":name",$name,PDO::PARAM_STR);
//$code = "n007";
//$name = "测试3";

$st->execute($_POST);


?>

  

pdo的使用