自带事务功能,多条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值