PDO
MySQLI是针对MySQL数据库扩展的,是专门访问MySQL数据库的
PDO是一个数据库访问的一个扩展类,通过一个类访问多个数据库,就是一个数据访问抽象层,把类结合在一块了
可以访问别的数据库,是数据访问的抽象层
<!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> <?php //PDO //1.访问不同的数据库 //2.自带事务功能.通过回滚操作可以把操作内容恢复 //3.防止SQL注入 //PDO怎么用 /*//1.造对象 $dsn = "mysql:dbname=mydb;host=localhost";"驱动名:数据库名称;服务器地址" $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);执行的是增删改*/ //事务功能 要么全执行成功,要么全执行失败 //造对象 $dsn = "mysql:dbname=1016;host=localhost"; $pdo = new PDO($dsn,"root","数据库密码"); //设置异常模式,如果出现错误,抛一个异常出来 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);/*设置属性(名称,值) 注意不要加双引号*/ //写SQL语句 $sql1 = "insert into nation values('n007','朝鲜族')"; $sql2 = "insert into nation values('n008','彝族')"; //启动事务,执行两条SQL语句,最终提交给事务,然后事务判断有没有问题,要是有问题就抛出问题 try//试着执行 { //启动事务 $pdo->beginTransaction(); $pdo->exec($sql1); $pdo->exec($sql2); //提交事务 $pdo->commit(); } catch/*抓住*/(PDOException $e)//PDO抛出的一个类型 { //$e->getMessage();显示错误信息 //回滚 $pdo->rollBack(); } /*final//最终执行的内容,出不出错都执行,一般写关闭代码(PHP不常见) { }*/ ?> </body> </html>
<!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> <?php //造对象 $dsn = "mysql:dbname=1016;host=localhost"; $pdo = new PDO($dsn,"root","数据库密码"); //写SQL语句,预处理语句 $sql = "select * from nation"; //准备执行 $st = $pdo->prepare($sql); //执行 $st->execute(); //读数据 fetch 一行或fetch all 全部 var_dump($st->fetchAll(PDO::FETCH_ASSOC)); ?> </body> </html>
<!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> <?php //造对象 $dsn = "mysql:dbname=1016;host=localhost"; $pdo = new PDO($dsn,"root","数据库密码"); //写SQL语句,预处理语句,使用name占位(名称占位) 前面要加冒号 $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="n011"; $name="土家族";*/ //用关联数组 $attr = array("code"=>"n012","name"=>"布依族"); //执行 $st->execute($attr); //总结:name占位,用的关联数组;?占位,用的索引数组 ?> </body> </html>
<!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> <?php //造对象 $dsn = "mysql:dbname=1016;host=localhost"; $pdo = new PDO($dsn,"root","数据库密码"); //写SQL语句,预处理语句 用问号占位置 $sql = "insert into nation values(?,?)"; //准备SQL语句,返回statement对象 用变量接收返回的statement对象 $st = $pdo->prepare($sql); //绑定参数 bind绑 Param参数 用问号站位的从1开始索引 /* 简化前 $st->bindParam(1,$code); $st->bindParam(2,$name); //可以在后面赋值也可以在前面 $code="n022"; $name="矮人族";*/ // 简化后 array数组 $attr = array("n010","蒙古族"); //提交执行,不用给SQL语句了,已经传过去了 var_dump($st->execute($attr)); //execute 成功返回true 失败返回false //预处理语句里面用?占位的,给数组的时候要给索引数组,顺序要对应起来 ?> </body> </html>