什么是PDO?

我不给大家讲定义,就是给大家我的看法,我认为PDO就是PHP官方提供的、面向对象的、用来操作数据库的扩展。PDO不单可以访问Mysql,好像一般 的数据库都行,只要装上对应的扩展就可以了,一般用PHP的都是Mysql,所以我只装了Mysql的。

如何如何安装PDO?

和安装别的PHP扩展一样,windows简单,在php.ini载入对应的dll文件就行了。linux还要麻烦一点,需要编译一下。

为什么要使用PDO?

首先它是面向对象的,面向对象的好处不必多说。

其次PDO用起来方便、安全,很多时候是会自动过滤特殊符号的,就不必你操心了。

PDO为多种数据库的访问提供同样的接口,以后网站要换个数据库就方便很多,也不用学习其他类了。

PDO的使用方法简介:

建议:使用PDO,可把magic_quotes_gpc设置关闭,使用PDO本身过滤字符串的功能。

第一步、创建PDO实例代码形式:$obj = new PDO('mysql:host=localhost;dbname=数据库名' , 用户名 , 密码);

代码示例:$obj = new PDO('mysql:host=localhost;dbname=localhost' ,  'root'  ,  '123456');

这样我们就有了一个PDO的实例了,也就可以使用该实例的对应方法了

第二步、设置参数

代码形式: $obj ->setAttribute(参数名称 , 参数值);

代码示例: $obj->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

示例的意思就是说,当PDO执行出现错误的时候以抛出异常的形式报错,个人建议用这样的方式,然后把所有数据库操作放在try里,非常方便,不懂可以去看PHP异常处理方面的文章。

PDO的设置的参数有:

PDO::ATTR_CASEPDO::ATTR_ERRMODEPDO::ATTR_ORACLE_NULLSPDO::ATTR_STRINGIFY_FETCHESPDO::ATTR_STATEMENT_CLASSPDO::ATTR_AUTOCOMMIT

PDO::MYSQL_ATTR_USE_BUFFERED_QUERY

PDO::ATTR_DEFAULT_FETCH_MODE 等由于篇幅限制,各个参数都代表什么,都可以设置什么值,我就不一一介绍了,找本手册,上面有。

第三步、执行一般操作

代码形式: $obj ->exec(SQL语句);

代码示例: $obj ->exec('SET NAMES UTF8');

这个函数会返回受影响的行数。

第四步、特殊字符过滤

当您自己构造SQL语句,就需要将一些敏感的字符过滤一下,就是类似AddSlashes函数。

代码形式: 过滤后的字符串 = $obj ->quote(字符串);

第五步、PDOStatement操作

PDOStatement是另一个类,其实例可以由PDO实例的prepare或query方法生成,通常我们操作数据库都是用这个类,而不是直接用PDO类,这个类方法很完善,也很安全。

例如,我们现在创建一个PDOStatement可以这样($obj 为PDO实例):

$ps = $obj->prepare("SELECT * FROM `article` WHERE `id` = 1");

这个时候,$ps就是一个 PDOStatement类的实例,我们就可以使用对应的方法了。prepare函数执行之后,其实并没有向数据库提交任何请求,也就是说sql语句还没 有执行,只是“准备”好了一个SQL语句,你需要调用$ps 的 execute方法,才真正的执行,

所以我们要这样:$ps->execute();

而PDO的query方法,就相当于先prepare,得到实例后再execute,

所以,如果代码这样写($obj 为PDO实例):

$ps = $obj->query("SELECT * FROM `article` WHERE `id` = 1");

这样就不用再执行execute了,SQL语句已经被执行了,但这个方法和prepare方法一样,都返回一个PDOStatement类的实例。

既然PDO实例的prepare方法比query方法要多一步,为什么不直接用query呢?parepare还有什么用呢?

用处可大了,事实上我们大多数情况,都是用prepare,而不是query,原因就是prepare可以写带”参数“的sql语句。

例如 $ps = $obj->prepare("SELECT * FROM `article` WHERE `id` = ?");

大家看到区别了吗?我后面那个`id` = 1, 换乘 `id` = ?了,这个问号就代表一个参数,这个参数是可以修改的。

例如我们这样写  $ps->bindValue(1 , 10);

这句代码的意思就是把sql语句中的第一个问号,替换成10,这样一来,我们执行$ps->execute(); 实际上是执行了 SELECT * FROM `article` WHERE `id` = 10。

需要注意的是,bindValue这里的第二个参数已经过滤的敏感字符,无需再次过滤,更不需要加引号什么的,直接用字符串或数字的值就行。

执行查询语句之后,我们可以通过fetch或fetchAll函数来获得查询结果,两个函数,一个是返回一条记录,一个是返回所有记录。

我说了一大堆,也不知道说清楚没有,写一个完整的实例吧。

try{

$obj = new PDO('mysql:host=localhost;dbname=localhost' ,  'root'  ,  '123456');//生成PDO示例

$obj ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//设置以异常的形式报错

$obj ->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE , PDO::FETCH_ASSOC );//设置fetch时返回数据形式为数组

$ps = $obj->prepare("SELECT *  FROM `article` WHERE `type` = ? and `menu` = ?");//生成一个PDOStatement实例

$ps->bindValue(1 , "文章");//第一个?处的参数换成 文章,不需要附加任何处理

$ps->bindValue(2 , 2);//第二个?处的参数换成2,不需要附加任何处理

$ps->execute(); //正式执行。

$res = $ps->fetchAll();//得到查询结果

} catch(Exception $e){

exit($e->getMessage());

}

?>

pdo mysql 教程_PDO入门教程相关推荐

  1. Mysql数据库基础入门教程

    Mysql数据库基础入门教程 课程链接:https://www.bilibili.com/video/BV1Qb411x7Yc?p=1 2022/1/22start 一.数据库简介 1.什么是数据库? ...

  2. TensorFlow 中文资源精选,官方网站,安装教程,入门教程,实战项目,学习路径。

    转载至:http://www.nanjixiong.com/thread-122211-1-1.html Awesome-TensorFlow-Chinese TensorFlow 中文资源全集,学习 ...

  3. extjs form java_[Java教程]ExtJS入门教程02,form也可以很优雅

    [Java教程]ExtJS入门教程02,form也可以很优雅 0 2014-03-28 12:00:40 在上一篇<Extjs window 入门>中,我们已经看到了如何将一个form组件 ...

  4. MySQL Connector/C++入门教程(上)

    转载原文:http://blog.csdn.net/jgood/article/details/5661339 原文地址: http://dev.mysql.com/tech-resources/ar ...

  5. MySQL数据库新手入门教程

    相信很多做数据分析的朋友都发现,在平时做业务分析中,Excel表格是我们使用最频繁的工具.我们还发现,Excel虽然好用,但一旦数据量大了起来,比如处理二三十万条或以上数据量的时候,就会出现卡顿,甚至 ...

  6. django mysql 教程_Django 入门教程

    简介:本课程使用的开发环境为 Python 3.x .Django 1.8.13.课程中将对 Django 的环境搭建.视图.链接路由.模板.模型.数据库操作以及表单进行简单介绍,并结合简单实验示例加 ...

  7. python tensorflow教程_TensorFlow入门教程TensorFlow 基本使用T

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 TensorFlow入门教程 TensorFlow 基本使用 TensorFlow官方中文教程 TensorFlow 的特点: 使用图 (graph) 来 ...

  8. python第一次使用教程-python入门教程第一日

    python 官方下载地址:https://www.python.org/downloads/ 根据系统的不同安装包也不同,但是开发的程序兼容各个操作系统,这点是python能吃得开的原因之一. py ...

  9. linux terminal教程,Linux入门教程 - 如何记录和重放Linux终端会话

    原标题:Linux入门教程 - 如何记录和重放Linux终端会话 来自:https://www.linuxmi.com/replay-linux.html 使用命令,我们可以在type文件中记录终端会 ...

最新文章

  1. mysql 字段存放小图标_让MySQL支持emoji图标存储
  2. JavaScript语言基础2
  3. UINavigationController 返回到各级目录
  4. 深度探索c++对象模型读书笔记:Data语意学-Data Member的绑定
  5. C语言(CED)钢条最优切割收益
  6. HTML轮播图全宽,jq全兼容自适应宽度图片轮播(新手适用)
  7. Docker Hello World
  8. 大数据与传统数仓的区别?
  9. php开源源码管理后台小程序团购,秒杀,分销 高可用
  10. 内网IP和外网IP的区别以及作用
  11. 搜索引擎优化内容及方法
  12. 如何将class文件转换成java文件
  13. java8 Stream分组求和reducing分组求最大值
  14. 干货!Java基础知识梳理,绝对经典
  15. layui前端项目打包方法_layui封装模块基础教程
  16. 学计算机理论课要记笔记吗,学生应该用笔记本电脑记笔记吗?
  17. 中基鸿业投资理财好习惯
  18. Error starting stream. VIDIOC_STREAMON: Protocol error Unable to use mmap. Using read instead. Unabl
  19. 微软MPP2.0 Microsoft Pen Protocol V2.0 officialEEAP.pdf
  20. Ext js 4 全选和反选

热门文章

  1. 无线华为能连苹果不能连接到服务器,华为网络正常app连不上网络
  2. 转转“拯救世界”的第一步,师从小米换LOGO?
  3. OPC教程一:什么是OPC
  4. 初中化学人教版教案二-Leo老师
  5. Python分布式通用爬虫(4)
  6. 学校机房计算机网络设计,建好高校机房 从设计上需掌握三大要素
  7. U3D游戏开发框架(四)——音频管理器
  8. Python 利用Baostock 下载股票代码,写入Mysql数据库
  9. python台风动图绘制_python可视化绘图:台风路径可视化
  10. 徐州地区地理生物计算机考试试题,2020年初中学业水平考试 地理、生物7月14日开考...