PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。php
PDO 提供了一个数据访问抽象层,这意味着,无论使用哪一种数据库,均可以用相同的函数(方法)来查询和获取数据。html
PDO随PHP5.1发行,在PHP5.0的PECL扩展中也能够使用,没法运行于以前的PHP版本。mysql
pdo功能:sql
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);
事务功能:函数
事务:可以控制语句同时成功同时失败,失败时能够回滚:post
$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注入攻击:fetch
索引方法:
//预处理语句防止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="添加" /> </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); ?>