简介:PDO扩大为PHP拜访数据库界说了一个轻量级的、分歧性的接口,PDO处理了数据库衔接没有对立的成绩。
1、 PDO简介
本章次要引见PDO的装置与设置装备摆设,和应用PDO衔接数据库的办法。
1-1PDO简介
PDO是PHP Data Object(PHP数据工具)的简称,它是与PHP5.1版本一同公布的,今朝支持的数据库包罗Firebird、FreeTDS、Interbase、MySQL、MS SQL Server、ODBC、Oracle、Postgre SQL、SQLite以及Sybase。当操作没有同数据库时,只要要修正PDO中的DSN
(数据库源) ,便可应用PDO的对立接口进行操作。
PDO特点:
编码分歧性:PDO提供可用于各类数据库的繁多接口
灵敏性:PDO正在运转时必需加载数据库驱动顺序,以是没有需求每一次正在应用数据库时,从新设置装备摆设以及从新编译PHP
高功能:PDO是用C言语编写的编译为PHP,与用php编写的其余计划相比,尽管其余性能相反,但提供了更高的功能
面向工具特点:PDO是行使的PHP5面向工具的特点,能够取得更高效的数据库通讯。
留意:PDO扩大只是一个形象的接口层,行使PDO扩大自身,其实不能完成任何数据库的操作,必需应用一个特点的方式把各自的特征体现进去才行。
1-2 PDO的设置装备摆设与启用
1-3 PDO衔接数据库
1.经过参数方式衔接数据库(重点把握此种方法)
//经过参数方式衔接数据库 try{ $dsn='mysql:host=localhost;dbname=school'; $username='root'; $password='root'; $pdo=new PDO($dsn,$username,$password); var_dump($pdo); }catch (PDOException $e){ echo $e->getMessage(); }; 需求留意:dsn是你的数据源 输入后果:object(PDO)#1 (0) { }
2、 PDO工具的应用
次要引见PDO工具办法的应用。
2-1 [PDO] exec()办法执行建表操作
<?php try{ //驱动器的称号 mysql $pdo=new PDO('mysql:host=localhost;dbname=school','root','root'); //exec():执行一条sql语句并前往其受影响的行数;假如不受影响的记载,它前往0 //exec关于select不作用 //PHP是一个Web编程言语,正在编程进程中难免会遇到用echo来输入年夜段的html以及javascript剧本的状况, //假如用传统的输入办法 ——按字符串输入的话, //一定要有年夜量的本义符来对字符串中的引号等非凡字符进行本义,以避免呈现语法谬误。 //假如是一两处还能够容忍,然而要是一个完好的 html文本或许是一个200行的js我想是谁城市解体的。 //这就是PHP为何要引入一个定界符的缘由——至多一年夜局部缘由是这样的。 /* 1.PHP定界符的作用就是依照原样,包罗换行格局甚么的,输入正在其外部的货色; 2.正在PHP定界符中的任何非凡字符都没有需求本义; 3.PHP定界符中的PHP变量会被失常的用其值来交换。 PHP中的定界符格局是这样的: <<<Eof …… Eof;*/ $sql=<<<EOF create table if not exists t_teacher( id int UNSIGNED auto_increment primary key, teaname varchar(20) not null UNIQUE, pwd char(32) not null, email varchar(30) not null ); EOF; $res= $pdo->exec($sql); var_dump($res); }catch (PDOException $e){ echo $e->getMessage(); };
输入后果:int(0);
2-2 [PDO] exec()办法执行拔出记载操作
续下面:拔出一条或多笔记录
<?php try{ //驱动器的称号 mysql $pdo=new PDO('mysql:host=localhost;dbname=school','root','root'); $sql='insert into t_teacher values(default,"king5","'.md5('king').'","waly@qq.com");'; $res=$pdo->exec($sql); echo $res; }catch (PDOException $e){ echo $e->getMessage(); };
<?php try{ //驱动器的称号 mysql $pdo=new PDO('mysql:host=localhost;dbname=school','root','root'); //$sql='insert into t_teacher values(default,"king6","'.md5('king').'","waly@qq.com");'; $sql=<<<EOF insert into t_teacher values (default,"king7","'.md5('king').'","waly@qq.com"), (default,"king8","'.md5('king').'","waly@qq.com"), (default,"king9","'.md5('king').'","waly@qq.com") EOF; $res=$pdo->exec($sql); echo '受影响的记载的条数为:'. $res."<br/>"; //$pdo->lastInsertId():失去新拔出记载的ID号 //echo '最初拔出的ID号为:'.$pdo->lastInsertId(); }catch (PDOException $e){ echo $e->getMessage(); };
2-3 [PDO] exec()办法执行其余SQL操作
自身是king,修正为king,会是0笔记录被影响.
lastInsertId() 只能对拔出有影响。
exec()对查问无作用
2-4 [PDO] errorCode()以及errorInfo()办法查看谬误信息
<?php try{ //驱动器的称号 mysql $pdo=new PDO('mysql:host=localhost;dbname=school','root','root'); //谬误的表名 $sql='insert into t_teacher1 values(default,"king6","'.md5('king').'","waly@qq.com");'; $res=$pdo->exec($sql); if($res===false){ //$pdo->errorCode(); SQLSTATE的值 echo $pdo->errorCode(); echo '<hr/>'; //$pdo->errorInfo():前往的谬误信息的数组,数组中蕴含3个单位 //0=>SQLSTATE(谬误编号),1=>CODE(谬误码),2=>INFO(谬误信息) $errInfo=$pdo->errorInfo(); print_r($errInfo); } }catch (PDOException $e){ echo $e->getMessage(); };
2-5 [PDO] query()办法执行查问语句
<?php try{ //驱动器的称号 mysql $pdo=new PDO('mysql:host=localhost;dbname=school','root','root'); //查问一笔记录 //$sql='select * from t_teacher where id=5'; //查问多笔记录 $sql='select * from t_teacher'; //$pdo->query($sql):执行sql语句,前往PDOStatement工具:需求遍历这个工具,将外面的内容掏出来 $stmt=$pdo->query($sql); var_dump($stmt); //只能看出这个语句前往的是一个工具 echo '<hr/>'; foreach ($stmt as $row){ print_r($row); echo '<hr/>'; echo '编号:'.$row['id'].'<br/>'; echo '用户名:'.$row['teaname'].'<br/>'; echo '邮箱:'.$row['email'].'<br/>'; echo '<hr/>'; } }catch (PDOException $e){ echo $e->getMessage(); };
Query()用于拔出数据 <?php try{ //驱动器的称号 mysql $pdo=new PDO('mysql:host=localhost;dbname=school','root','root'); //拔出一笔记录 $sql='insert into t_teacher values(default,"king12","'.md5('king').'","waly@qq.com");'; //$pdo->query($sql):执行sql语句,前往PDOStatement工具:需求遍历这个工具,将外面的内容掏出来 $stmt=$pdo->query($sql); var_dump($stmt); //只能看出这个语句前往的是一个工具 }catch (PDOException $e){ echo $e->getMessage(); };
留意:更多的用query()查问数据,用exec()完成增删改
2-6 [PDO] prepare()以及execute()办法执行查问语句
<?php //查问单条语句 try{ //驱动器的称号 mysql $pdo=new PDO('mysql:host=localhost;dbname=school','root','root'); //查问一笔记录 $sql='select * from t_teacher where id=5'; //$pdo->prepare($sql);预备sql语句 $stmt=$pdo->prepare($sql); //execute():执行预解决语句 $res=$stmt->execute(); //var_dump($res); //会前往bool(true) //查数据应用 //fetch():失去后果集中的一笔记录(作为索引+联系关系款式前往) $row=$stmt->fetch(); print_r($row); }catch (PDOException $e){ echo $e->getMessage(); };
<?php try{ //驱动器的称号 mysql $pdo=new PDO('mysql:host=localhost;dbname=school','root','root'); //查问多笔记录 $sql='select * from t_teacher'; //$pdo->prepare($sql);预备sql语句 $stmt=$pdo->prepare($sql); //execute():执行预解决语句 $res=$stmt->execute(); //var_dump($res); //会前往bool(true) //查数据应用 //fetch():失去后果集中的一笔记录(作为索引+联系关系数组) /*if($res){ while ($row=$stmt->fetch()){ print_r($row); echo '<hr/>'; } }*/ //fetchAll() 查问一切记载,以二维数组(索引+联系关系形式) $rows=$stmt->fetchAll(); print_r($rows); }catch (PDOException $e){ echo $e->getMessage(); };
指定类型:咱们更多的是想失去联系关系数组,咱们能够经过两种形式来取得,第一种形式:设置其取回数据的形式(设置参数、常量);第二种形式:经过办法
3、 PDOStatement工具的应用
本章次要引见PDOStatement工具办法的应用,和参数的绑定与预处识。
3-1 [PDO] quote()办法避免SQL注入
带前提查问 登录完成的例子
<?php header('content-type:text/html;charset=utf-8'); $username=$_POST['username']; $password=$_POST['password']; try{ //衔接数据库 $pdo=new PDO('mysql:host=localhost;dbname=school','root','root'); //向数据库表查找对应的用户信息//假如存正在,证实有这个用户,登录胜利;不然登录失败 //输出 'or 1=1 # 能够查看查到的数据 //$sql="select * from t_user WHERE `name`='{$username}' AND `password`='{$password}'"; //经过quote():前往带引号的字符串,过滤字符串中的非凡字符 $username=$pdo->quote($username); $sql="select * from t_user WHERE `name`={$username} AND `password`={$password}"; echo $sql; $stmt=$pdo->query($sql); //PDOStatement工具的办法:rowCount() :关于select操作前往的后果集中记载的条数, //关于INSERT、UPDATE、DELETE前往受影响的记载的条数 echo $stmt->rowCount(); }catch (PDOException $e){ echo $e->getMessage(); }
3-2 [PDO] 预解决语句中的占位符的应用
<?php header('content-type:text/html;charset=utf-8'); $username=$_POST['username']; $password=$_POST['password']; try{ //衔接数据库 $pdo=new PDO('mysql:host=localhost;dbname=school','root','root'); //占位符有两种办法 //第一种办法 $sql="select * from t_user WHERE `name`=:username and `password`=:password"; $stmt=$pdo->prepare($sql); $stmt->execute(array(":username"=>$username,":password"=>$password)); //PDOStatement工具的办法:rowCount() :关于select操作前往的后果集中记载的条数, //关于INSERT、UPDATE、DELETE前往受影响的记载的条数 echo $stmt->rowCount(); //第二种办法 $sql="select * from t_user WHERE `name`=? and `password`=?"; $stmt=$pdo->prepare($sql); $stmt->execute(array($username,$password)); echo $stmt->rowCount(); }catch (PDOException $e){ echo $e->getMessage(); }
3-3 [PDO] bindParam()办法绑定参数
两种形式:定名参数占位符,问号形式
<?php header('content-type:text/html;charset=utf-8'); try{ //衔接数据库 $pdo=new PDO('mysql:host=localhost;dbname=school','root','root'); // $sql="insert into t_user(`name`,`password`,`sex`) VALUES (:username,:password,:sex)"; $sql="insert into t_user VALUES (DEFAULT ,:username,:password,:sex)"; $stmt=$pdo->prepare($sql); $stmt->bindParam(":username",$username,PDO::PARAM_STR); $stmt->bindParam(":password",$password,PDO::PARAM_STR); $stmt->bindParam(":sex",$sex,PDO::PARAM_STR); $username='张三'; $password='123654'; $sex='M'; $stmt->execute(); echo $stmt->rowCount(); }catch (PDOException $e){ echo $e->getMessage(); }
<?php header('content-type:text/html;charset=utf-8'); try{ //衔接数据库 $pdo=new PDO('mysql:host=localhost;dbname=school','root','root'); // $sql="insert into t_user(`name`,`password`,`sex`) VALUES (:username,:password,:sex)"; $sql="insert into t_user VALUES (DEFAULT ,?,?,?)"; $stmt=$pdo->prepare($sql); $stmt->bindParam(1,$username); $stmt->bindParam(2,$password); $stmt->bindParam(3,$sex); $username='张三1'; $password='1236541'; $sex='F'; $stmt->execute(); echo $stmt->rowCount(); }catch (PDOException $e){ echo $e->getMessage(); }
3-4 [PDO] bindValue()办法绑定参数
向用户表拔出数据:定名参数占位符,问号形式相似
<?php header('content-type:text/html;charset=utf-8'); try{ //衔接数据库 $pdo=new PDO('mysql:host=localhost;dbname=school','root','root'); // $sql="insert into t_user(`name`,`password`,`sex`) VALUES (:username,:password,:sex)"; $sql="insert into t_user VALUES (DEFAULT ,?,?,?)"; $stmt=$pdo->prepare($sql); $username='李四'; $password='123654'; $stmt->bindValue(1,$username); $stmt->bindValue(2,$password); $stmt->bindValue(3,'M'); $stmt->execute(); echo $stmt->rowCount(); $username='李四1'; $password='1236541'; $stmt->bindValue(1,$username); $stmt->bindValue(2,$password); $stmt->bindValue(3,'M'); $stmt->execute(); echo $stmt->rowCount(); }catch (PDOException $e){ echo $e->getMessage(); }
3-5 [PDO] bindColumn()办法绑定参数
<?php header('content-type:text/html;charset=utf-8'); try{ //衔接数据库 $pdo=new PDO('mysql:host=localhost;dbname=school','root','root'); // $sql="insert into t_user(`name`,`password`,`sex`) VALUES (:username,:password,:sex)"; $sql="select `name`,`password`,`sex` from t_user"; $stmt=$pdo->prepare($sql); $stmt->execute(); echo '后果集中的列数一共有:'.$stmt->columnCount(); echo "<hr/>"; print_r($stmt->getColumnMeta(0)); $stmt->bindColumn(1,$username); $stmt->bindColumn(2,$password); $stmt->bindColumn(3,$sex); while ($stmt->fetch(PDO::FETCH_BOUND)){ echo '用户名:'.$username."-明码:".$password."-性别:".$sex."<hr/>"; } echo $stmt->rowCount(); }catch (PDOException $e){ echo $e->getMessage(); }
3-6 [PDO] fetchColumn()办法从后果集中前往一列
<?php header('content-type:text/html;charset=utf-8'); try{ //衔接数据库 $pdo=new PDO('mysql:host=localhost;dbname=school','root','root'); $sql="select `name`,`password`,`sex` from t_user"; $stmt=$pdo->query($sql); //索引默许从0开端 echo $stmt->fetchColumn(0),"<br/>"; echo $stmt->fetchColumn(1),"<br/>"; echo $stmt->fetchColumn(2); }catch (PDOException $e){ echo $e->getMessage(); }
3-7 [PDO] debugDumpParams()办法打印一条预解决语句
<?php header('content-type:text/html;charset=utf-8'); try{ //衔接数据库 $pdo=new PDO('mysql:host=localhost;dbname=school','root','root'); // $sql="insert into t_user(`name`,`password`,`sex`) VALUES (:username,:password,:sex)"; $sql="insert into t_user VALUES (DEFAULT ,:username,:password,:sex)"; $stmt=$pdo->prepare($sql); $stmt->bindParam(":username",$username,PDO::PARAM_STR); $stmt->bindParam(":password",$password,PDO::PARAM_STR); $stmt->bindParam(":sex",$sex,PDO::PARAM_STR); $username='张三'; $password='123654'; $sex='M'; $stmt->execute(); $stmt->debugDumpParams(); }catch (PDOException $e){ echo $e->getMessage(); }
4、PDO事务解决
次要引见若何应用PDO进行事务解决
4-1 PDO谬误解决模式
3种谬误解决模式
静默模式 <?php header('content-type:text/html;charset=utf-8'); /*PDO::ERRMODE_SLIENT:默许模式,静默模式*/ try{ //衔接数据库 $pdo=new PDO('mysql:host=localhost;dbname=school','root','root'); $sql="select * from nonet_user"; $stmt=$pdo->query($sql); echo $pdo->errorCode(); echo '<br/>'; echo $pdo->errorInfo(); }catch (PDOException $e){ echo $e->getMessage(); }
<?php header('content-type:text/html;charset=utf-8'); /*PDO::ERRMODE_SLIENT:默许模式,静默模式 *PDO::ERRMODE_WARNING:正告模式 * PDO::ERRMODE_EXCEPTION:异样模式 */ try{ //衔接数据库 $pdo=new PDO('mysql:host=localhost;dbname=school','root','root'); //设置正告模式 //$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING); //设置异样模式:保举应用 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql="select * from nonet_user"; $stmt=$pdo->query($sql); echo $pdo->errorCode(); echo '<br/>'; echo $pdo->errorInfo(); }catch (PDOException $e){ echo $e->getMessage(); }
4-2 PDO事务解决
<?php header('content-type:text/html;charset=utf-8'); try{ $option=array(PDO::ATTR_AUTOCOMMIT,0); $pdo=new PDO('mysql:host=localhost;dbname=school','root','root',$option); //开启事务 $pdo->beginTransaction(); var_dump($pdo->inTransaction()); $sql="update account set money=money-200 WHERE username='king'"; $res=$pdo->exec($sql); if($res==0){ throw new PDOException('转账失败'); } $res1=$pdo->exec('update account set money=money+200 WHERE username="queen"'); if($res1==0){ throw new PDOException('接纳失败'); } $pdo->co妹妹it(); }catch (PDOException $e){ $pdo->rollBack(); echo $e->getMessage(); }
好了,以上就是对于本文引见的对于PHP中PDO操作数据库的具体操作和实例了,相理解更多相干成绩请拜访PHP中文网:
PHP视频教程
以上就是无关PHP中PDO衔接数据库的具体教程与实际操作演示的具体内容,更多请存眷资源魔其它相干文章!
标签: php开发教程 php开发资料 php开发自学 PDO
抱歉,评论功能暂时关闭!