PDO 类基本应用|学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 快速学习 PDO 类基本应用

开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第三阶段PDO 事物功能】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/713/detail/12733


PDO 类基本应用

 

内容介绍:

一、前言

二、基本应用

三、示例演示

四、小结

 

一、前言

目标:快速了解PDO类的基本功能,能够利用PDO类实现数据库的初始化认证和SQL执行。

先进行数据库的初始化认证再执行SQL。

概念:

PDO类基本应用:了解PDO类的方法,使用PDO方法解决相应需求问题

 

二、基本应用

1. PDO类虽然提供了很多方法,但是常用的方法有以下几个,因为PDO类是一个工具类考虑比较全面,需要解决大多数问题,而实际应用用不到。

PDO::_construct():实例化PDO对象:帮助实现连接认证、数据库连接、字符集设置。数据库认证连接好后直接执行SQL完善业务。

PDO:.exec():执行一个写操作SQL指令,返回受影响的行数。业务中的执行分为读和写两个操作。

PDO:query():执行一个读操作SQL指令,返回一个PDOStatement类对象(后者进行数据解析操作)利用PDOStatement类中的其它方法进行操作。

PDO::errorCode()和PDO::errorInfo():获取上次错误的信息(错误码和错误描述数组)

2. PDO实例化对象:利用其构造方法_construct(string \$dsn, string $user,string \$pass [, array \$drivers])实现。[, array \$drivers])可以不存在,string $user,string \$pass [, array \$drivers])三个理论上也可以不存在,但是在连接认证时用户名密码都需要提供。构造方法由4个参数组成,其中一般前三个为必须参数,第四个为可选参数

1)$dsn:一个数据库基本信息字符串,包含数据库产品,主机地址等

l 驱动名字(数据库产品),使用英文:分隔,PDO可以操作多个数据库,操作具体的数据库如mysql:表示使用mysql数据库

l 驱动选项(主机地址),使用host=具体主机地址,跟在驱动名字之后,如'mysql:host=localhost'

l 驱动选项(端口),使用port=端口号,默认为3306可以不写,拼凑在驱动名字后,不区分先后顺序。如'mysql:host=localhost;port=3306'或者'mysql:port=3306;host=localhost',使用分号和其他驱动分开

l 驱动选项(数据库名字),使用dbname=数据库名字(可以事先没有)

l 字符集设置(字符集名字)使用charset=字符集名字(可以事先没有)

2)$user :用户名,如果数据库允许匿名用户出现﹐那么可以没有该参数(只有dsn)

3)$pass:密码,与用户名一样

4)$drivers: PDO属性设置,是关联数组,利用PDO内部的常量进行设置。若想要使用可以查看具体说明。案例大部分使用都为($dsn, $user, $password)

以上就是一些基本使用。exec()和query()不做讲解,只是一个方法,用SQL就可以执行。errorCode()和errorInfo()在以上方法出错时可以获取错误。

 

三、示例演示

PDO如何具体实现基本应用?

1、步骤

1、实例化PDO对象,完成数据库初始化认证

2、根据SQL类型选择不同的方法执行SQL,写操作就使用PDO的exec()方法,读操作使用query()方法。

3、检查SQL可能存在的语法错误

2、示例:

(1)实例化PDO对象,完成初始化操作

#方案1:直接写入数据进行数据库初始化

$pdo = new PDO('mysql: host=localhost;port=3306;dbname=db_2; charset=utf8 ' , ' root ' , ' root'); //主机地址、端口号、dbname、charset、用户名、密码

#方案2:利用变量保存数据来实现数据库初始化(数据来源可以是其他配置文件:安全)

$dsn = 'mysql:host=localhost; dbname=db_2 ; charset=utf8 ' ;

$user = 'root' ;

$pass = 'root ';

$pdo = new PDO($dsn , suser , $pass) ;

//可以将参数放在其它配置文件中安全进行操作,不要在编写时直接编写,因为一旦修改就需要修改其中的代码,所以使用配置文件配置,采用从中读取的方式,配置文件一处修改后都可以使用,只要是数据库实例化都会去使用得到新内容。

两种方式都可以,在Sublime Text中新建32pdo.php保存到本机上,接着输入

#PDO的基本操作

#1、实例化

$pdo=new PDO(‘mysql:host=localhost;port=3306;dbname=db_2;charset=charset’,’root’,’root’)

new PDO就可以实现数据库的连接、字符集的选择等,有三个参数,第一个是数据库的信息:产品,此处使用mysql产品因为开启了mysql扩展,若使用其它不能连接,主机地址连接当前host,端口等于3306,dbname为db_2,再加上charset,没有顺序;第二个参数为用户root;第三个参数为密码。

完成后还需要进行使用,所以使用对象:$pdo进行保存。

再来查看该对象:输入

var_dump($pdo);

在下图输入32pdo.php

image.png出现报错:unknown character

上述代码中的charset=charset改为charset=utf8。出现报错系统可以直接看到。再来刷新得到一个对象object(PDO)#1{0}{}

image.png看到在PDO的对象中没有属性,为0,意味着mysql:host=localhost;port=3306;dbname=db_2;charset=charset’,’root’,’root’中的数据没有进行数据保存。也不能后期修改。因为连接完成就不再使用,所以不进行保存。所以PDO类没有属性。

以上实例化PDO后,就可以进行SQL操作。

(2)得到对象后,我们就可以利用PDO对象调用相关方法执行SQL操作: exec执行数据返回SQL,query执行有结果返回SQL

#实例化PDO对象

$pdo = new PDO( 'mysql:host=localhost;port=3306; dbname=db_2 ' , ' root' , ' root');

#写操作

$sql = "delete from t_28";    #模拟SQL指令

$rows = $pdo >exec($sql);    #得到受影响的行数:执行失败返回false

#读操作

$sql = "select * from t_40";

$stmt = $pdo->query($sql);    #成功返回PDOStatement类对象,失败得到false

进行读操作:delete from,进行写操作:select * from,然后使用query方法。

演示:在代码中继续输入:

#写操作执行

$sql = ‘delete from t_28 limit 1’;

$res=$pdo->exec($sql); //最终会拿到一个结果

var_dump($res);  //布尔类型无法输出,使用dump

完成后在页面刷新,得到结果

object(PDO)#1(0){}int(1)

int(1)说明当前删除成功,返回受影响的行数。

如果失败会返回一个false,演示失败:

$sql = ‘delete from t_28limit 1’;

再刷新得到结果

object(PDO)#1{0}{}bool(false)

以上就是写操作,注释掉代码var_dump($res);,再来输入

#读操作执行

$sql = “select * from t_40”;

$stmt = $pdo->query($sql);

var_dump($stmt);  //打印结果

刷新页面结果显示

object(PDO)#1(0){}object(PDOStatement)#2(1){[“queryString”]=>string(18)*select*from t_40*}

拿到PDO类的对象,其中只有一个属性queryString。

正确会得到对象,演示错误:

$sql = “select * fromt_40”;

再刷新得到结果

object(PDO)#1{0}{}bool(false)

所以错误同样得到false,但是false不能具体显示哪处错误,所以要对错误进行处理。

(3)如果PDO对象在执行SQL时出现错误,即SQL本身有错误,那么可以通过PDO类提供的errorCode()和errorlnfo()

#实例化PDO对象

$pdo = new PDO('mysql:host=localhost;port=3306; dbname=db_2 ' , ' root ' , ' root');

#写操作

$sql = "delete fromt_40";   #错误SQL

$rows = Spdo->exec($sql);

#错误判定: exec方法执行结果成功也存在返回0的情况,错误会返回false,所以要判定是否是SQL错误,需要判定结果为false

if(false === $stmt){

#取出错误细信息

echo 'SQL错误:
';

echo '错误代码为: ' . $pdo->errorCode() . '
';   //$pdo->errorCode()
拿到错误编号,一般不会直接echo,而是写到错误日志中进行分析

echo '错误原因为: '. $pdo->errorInfo()[2];

# errorInfo返回数组,2下标代表错误具体信息

exit;

#错误不需要继续执行代码

演示:

先来打印错误原因代码,在读操作执行下输入

var_dump($pdo->errorInfo());

刷新页面显示:

object(PDO)#1(0){}bool(false) array(3)([0]=> string(5) 42000"[1]= int(1064)[2]=> string(154) "You have an error in your SQl syntax check the manual that corresponds to your MySQL server version for the right syntax to use near 'fromt_40' at line 1”}

结果是一个数组,有三个元素:内置错误编号、外置错误编号、具体错误信息

再来注释掉打印错误原因的代码,复制第三步代码:

不打印而是直接输出错误原因,结果就会变成:

object(PDO)#1(0){}bool(false) SQL错误:

错误代码为:42000

错误原因为:You have an error in your SQL syntax check the manual that corresponds to your MySQL server version for the right syntax to use near ‘fromt_40’ at line 1

以上错误结果与在cmd运行结果相同,在cmd内输入

mysql -uroot -p

use db_2

select * from_40;

如图与浏览器得到的结果相同

image.png可以将它当成客户端来进行调试,一般在开发阶段。生产阶段写入日志。

 

四、小结

1、PDO是一种外部提供的扩展,可以通过操作手册来协助学习使用2、PDO类主要用来实现数据库的初始化操作和SQL指令的执行。是PDO类的核心功能

3、SQL执行的结果不论是写操作还是读操作都有可能出错,因为执行的为SQL,而SQL在外部提供,系统没有办法保证sql完全正确,因此需要进行错误处理。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
关系型数据库 MySQL API
|
SQL 关系型数据库 MySQL
PDO 写操作|学习笔记
快速学习 PDO 写操作,利用PDO类完成一个完整的写操作实现,实现数据库的操作。
68 0
PDO 写操作|学习笔记
|
关系型数据库 MySQL PHP
PDO 扩展|学习笔记
快速学习 PDO 扩展,掌握 PDO 扩展的加载
152 0
PDO 扩展|学习笔记
|
PHP 开发者
封装 PDO(异常封装)|学习笔记
快速学习封装 PDO(异常封装)
84 0
封装 PDO(异常封装)|学习笔记
|
PHP 开发者
封装 PDO(小结)|学习笔记
快速学习封装 PDO(小结)
54 0
|
SQL PHP 开发者
封装 PDO(写操作)|学习笔记
快速学习封装 PDO(写操作)
55 0
|
关系型数据库 MySQL PHP
封装 PDO (初始化)|学习笔记
快速学习封装 PDO (初始化)
116 0
|
SQL PHP 数据库
封装 PDO(封装说明)|学习笔记
快速学习封装 PDO(封装说明)
146 0
|
SQL 存储 关系型数据库
PDO 事物功能|学习笔记
快速学习 PDO 事物功能,本节学习PDO的事物功能。MySQL学习中了解到MySQL支持事务操作,事务操作可以保证数据的完整性、事务的一些特性。PDO中也可以实现事务操作需求。
66 0
|
PHP 数据库
PHP面试题:单例模式,创建mysqli数据库链接的单例对象
PHP面试题:单例模式,创建mysqli数据库链接的单例对象
216 0