PDO(数据访问抽象层)

自带事务功能,多条sql同时执行时,如果其中一条执行失败,那么所有的都执行失败。
开启了事务,可以进行回滚操作,让程序变得更安全。

 

1.访问不同的数据库
2.自带事务功能
3.防止SQL注入:分两次发送

 

/*1.造对象
$dsn = "mysql:dbname=mydb;host=localhost";    //数据源名叫做 dsn
$pdo = new PDO($dsn,"root","123");

2.写SQL语句
$sql = "update nation set name='兽族' where code='n013'";

3.执行SQL语句
$r = $pdo->query($sql);
$r = $pdo->exec($sql);*/        //exec执行一条sql语句,并返回受影响的行数(增删改)

//事务功能
//造对象
$dsn = "mysql:dbname=mydb;host=localhost";
$pdo = new PDO($dsn,"root","123");

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


//写SQL语句
$sql1 = "insert into nation values('n016','人族')";
$sql2 = "insert into nation values('n017','不死族')";

//执行两条SQL语句
try            //代表试着执行两句sql语句,如果出现异常,用catch抓住,不交给程序处理
{
    //启动事务
    $pdo->beginTransaction();
    
    $pdo->exec($sql1);
    $pdo->exec($sql2);
    
    //提交事务
    $pdo->commit();
}
catch(PDOException $e)            //catch抓住异常,异常当做参数传过来放到e里面,PDOException是参数类型,里面有个getmessage方法,获取错误信息
{
    //$e->getMessage();
    //回滚
    $pdo->rollBack();
}
final            //最终的意思。 在其他语言中出现,一般用来做数据连接的关闭
{
    
}

 

防止sql注入攻击(因为它是分两次传送,所以要进行占位)

 

问号占位:

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

写SQL语句,预处理语句
$sql = "insert into nation values(?,?)";

准备SQL语句,返回statement对象
$st = $pdo->prepare($sql);

绑定参数
/*$st->bindParam(1,$code);
$st->bindParam(2,$name);

$code="n022";             //绑定完之后可以赋值
$name="矮人族";*/

$attr = array("n023","魔族");        //简写方法

//提交执行,不用给SQL语句了,已经传过去了
var_dump($st->execute($attr));


//预处理语句里面用?占位的,给数组的时候要给索引数组

 

name占位:

<?php

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

//写SQL语句,预处理语句,使用name占位
$sql = "insert into nation values(:code,:name)";

//准备执行
$st = $pdo->prepare($sql);

//绑定参数
/*$st->bindParam(":code",$code,PDO::PARAM_STR);        //$code参数     PDO::PARAM_STR指定参数必须是一个字符串
$st->bindParam(":name",$name,PDO::PARAM_STR);

$code="n024";
$name="狼族";*/

$attr = array("code"=>"n025","name"=>"虫族");

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

 

PDO查询:

<?php

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

//写SQL语句,预处理语句
$sql = "select * from nation";

//准备执行
$st = $pdo->prepare($sql);

//执行
$st->execute();            

//读数据
var_dump($st->fetchAll(PDO::FETCH_ASSOC));        //调用fetch方法是每次读一行。返回关联跟索引数组。里面的参数是选择返回关联或索引数组


?>

 

 

示例:

简单的登录页面:

<form action="chuli.php" method="post">
    <input type="text" name="code" />
    <input type="text" name="name" />
    <input type="submit" value="提交" />
</form>

使用PDO    name占位方法

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

//写SQL语句,预处理语句,使用name占位
$sql = "insert into nation values(:code,:name)";

//准备执行
$st = $pdo->prepare($sql);

//执行
$st->execute($_POST);        //post关联数组 里面有code、name值 

 

posted @ 2016-11-08 08:56  厚爱无需我多言。  阅读(273)  评论(0编辑  收藏  举报