您的位置 首页 php

PHP之PDO基本操作以及准备语句

工欲善其事必先利其器,好吧,说人话,先做前期的准备工作

第一步,做测试我们都要打印数组,对象等等,可是php自带的print_r,var_dump显示起来不好看

这看了都头疼,自己写一个打印函数,获取待打印的数据的类型 gettype (),别什么都var_dump;

测试一下,哦还不错,数组的结构清楚了.不得不说一句pre标签真的好用.顺便说下,打印string,integer类型的时候用echo而不用print,因为print有返回值(值为1),而echo没有,简而言之,快点

第二步,注册异常处理函数 set_exception_handler (),php自带的异常报错看起来真的不咋的,这颜色真的不舒服

我们自己写一个

结果如下

凑合着用吧

PDO的优点就不过介绍了,正式开工

PDO与数据库交互=>建立一个服务器连接并选择一个数据库,PDO通过构造函数完成

具体参数如下

那么开始,我的数据,库主机127.0.0.1,数据库app_ylts,用户名root,密码空.我的数据库采用utf8编码,下面是bs_node表中部分数据

开始连接数据库并且设置PDO的报错模式.

很多属性可以调整pdo的行为(具体参数有兴趣的朋友可以去查查),获取属性 getAttribute() ,设置属性 setAttribute()

这里说明一下为什么采取PDO::ERRMODE_EXCEPTION报错模式,因为PDO抛出的异常类PDOException继承的所有异常的基类Exception,而我们开始准备时注册了异常报错函数myException,方便我们查看以及记录错误(这功能没写),这也是我们一开始注册了异常报错函数的原因,一举两得.

下面查询(执行有结果集或者结果所影响的行数无关紧要时用 query() ,执行不返回结果集[insert,update,delete等]用 exec () 返回所影响的行数)

大功告成,截图

等等,不对啊,中文乱码,还返回了数组的 索引 ,明显不是我们想要的

先解决中文乱码的问题

$connect ->exec(‘SET NAMES utf8’);

乱码解决,PDO查询默认的返回结果集(我们查询的返回值$node_list是一个对象).在调用fetchAll()方法=>默认的话是返回既按列名索引又按在行中的数值偏移索引的值数组,如上图.这不是我们想要的,我们只需要返回列名索引的值数组,那么在调用 fetchAll() 方法时带参数[ PDO::FETCH_ASSOC] fetchAll()返回所有的结果集行(二维数组);fetch()结果集的下一行(一维数组),如果到末尾则 false

my_print($node_list->fetchAll(PDO::FETCH_ASSOC));

这里有引发了一个问题,我们不可能每次都这样带个参数吧?,其实在连接数据库是就可以通过参数 $driver_options (数组的形式)调整PDO的行为

fetch用法

对比fetchAll,清晰明了

PDO准备语句

每次发送查询给mysql服务器时,都必须解析该查询的语法,确保结构正确并且能够正确执行.我们大量数据的插入时,反复执行相同的查询.准备语句能在服务器上缓存查询的语法和执行过程,而服务器和客户端之间传输有变化的列值,以此来消除额外的开销

不使用prepare

使用prepare

结果

使用prepare还要慢点,你这是在逗我?

革命尚未成功,我在多测试几次.不对,测试的方法有问题,不可控因素太多;改变测试方法

数据

不使用prepare

使用prepare

数剧因为显示原因,没有贴出来完全.最后测试(多次测试取平均值),当插入数据越来越多的时候prepare的优势就会越来越明显,

现在正在考虑封装自己的数据操作类,以及实现连贯操作比如 Db::getInstance()->where($where)->orderBy($orderBy)->select() ,这种形式,可能下一篇会写,下周见!

文章来源:智云一二三科技

文章标题:PHP之PDO基本操作以及准备语句

文章地址:https://www.zhihuclub.com/152279.shtml

关于作者: 智云科技

热门文章

网站地图