有关PHP中PDO连接数据库的详细教程与实际操作演示

有关PHP中PDO连接数据库的详细教程与实际操作演示

内容导读

收集整理的这篇技术教程文章主要介绍了有关PHP中PDO连接数据库的详细教程与实际操作演示,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含13363字,纯文字阅读大概需要20分钟

内容图文

PDO—数据库抽象层

简介:PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,PDO解决了数据库连接不统一的问题。

一、 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) { }

二、 PDO对象的使用

主要介绍PDO对象方法的使用。

2-1 [PDO] exec()方法执行建表操作

<?phptry{

//驱动器的名称 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()方法执行插入记录操作

续上面:插入一条或多条记录

<?phptry{

//驱动器的名称 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();};
<?phptry{

//驱动器的名称 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()方法查看错误信息

<?phptry{

//驱动器的名称 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()方法执行查询语句

<?phptry{

//驱动器的名称 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()用于插入数据<?phptry{

//驱动器的名称 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();};
<?phptry{

//驱动器的名称 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();};

指定类型:我们更多的是想得到关联数组,我们可以通过两种方式来获得,第一种方式:设置其取回数据的方式(设置参数、常量);第二种方式:通过方法

三、 PDOStatement对象的使用

本章主要介绍PDOStatement对象方法的使用,以及参数的绑定与预处识。

3-1 [PDO] quote()方法防止SQL注入

带条件查询 登录实现的例子

<?phpheader('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] 预处理语句中的占位符的使用

<?phpheader('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()方法绑定参数

两种方式:命名参数占位符,问号方式

<?phpheader('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();}
<?phpheader('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()方法绑定参数

向用户表插入数据:命名参数占位符,问号方式类似

<?phpheader('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()方法绑定参数

<?phpheader('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()方法从结果集中返回一列

<?phpheader('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()方法打印一条预处理语句

<?phpheader('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();}

四、PDO事务处理

主要介绍如何使用PDO进行事务处理

4-1 PDO错误处理模式

3种错误处理模式

静默模式<?phpheader('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();}
<?phpheader('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事务处理

<?phpheader('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->commit();}catch (PDOException $e){

$pdo->rollBack();

echo $e->getMessage();}

好了,以上就是关于本文介绍的关于PHP中PDO操作数据库的详细操作以及实例了,相了解更多相关问题请访问PHP中文网:

PHP视频教程

以上就是有关PHP中PDO连接数据库的详细教程与实际操作演示的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的有关PHP中PDO连接数据库的详细教程与实际操作演示全部内容,希望文章能够帮你解决有关PHP中PDO连接数据库的详细教程与实际操作演示所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com