MySQLI是专门访问MySQL数据库的,不能访问其它数据库。PDO可以访问多种的数据库,它把操作类合并在一起,做成一个数据访问抽象层,这个抽象层就是PDO,根据类操作对应的数据库。mysqli是一个类,PDO也是一个类,只不过PDO这个类功能更加强大。

PDO的功能
1.访问不同的数据库
2.自带事务功能。事务是指同时执行几条sql语句,但是其中1条语句出了错无法执行,那么所有的就都执行失败。
3.防止SQL注入攻击。

1.访问不同数据库

下面代码是访问MySQL数据库的,如果访问其它数据库,只需要在造对象中更改数据库驱动mysql,换成其它数据库的驱动。

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>无标题文档</title>
  6. </head>
  7.  
  8. <body>
  1. <?php
  2. //PDO的用法
  3. //1.造对象
  4. $dsn = "mysql:dbname=text1;host=localhost";
  5. //mysql是指MySQL数据库的驱动名,加上冒号,冒号后面是数据库的名称。
  6. //host是服务器的地址,为localhost。
  7. //如果要使用其它数据库,要更改数据库的驱动名。可以从php手册里面找。
  8. //写的驱动一定是配好环境的驱动。可以在浏览器地址栏里输入服务器地址localhost查找支持的数据库驱动。
  9. $pdo = new PDO($dsn,"root","666");
  10. //参数:1.服务器的地址2.数据库的名称3.服务器密码
  11.  
  12. //写sql语句
  13. $sql = "update nation set name='兽族' where code='n003'";
  14.  
  15. //执行sql语句
  16. //$r = $pdo->exec($sql);//返回受影响的条数
  17. ?>
  1. </body>
  2. </html>

2.事务功能

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>无标题文档</title>
  6. </head>
  7.  
  8. <body>
  1. <?php
  2. //1.造对象
  3. $dsn = "mysql:dbname=text1;host=localhost";
  4. $pdo = new PDO($dsn,"root","666");
  5.  
  6. //设置异常模式,如果吹啊你错误,抛个异常出来。2个参数不要加双引号。
  7. $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
  8.  
  9. //写sql语句
  10. $sql1 = "insert into nation values('noo5','人族')";
  11. $sql2 = "insert into nation values('noo6','精灵族')";
  12.  
  13. //执行2条sql语句
  14. try//try代表加事务
  15. {
  16. $pdo->beginTransaction();//启动事务
  17.  
  18. $pdo->exec($sql1);
  19. $pdo->exec($sql2);
  20.  
  21. $pdo->commit();//提交事务
  22. }
  23. catch(PDOException $e)//抓住出现的异常。$e代表抓住的异常,异常保存在$e里面。
  24. {
  25. //$e->getMessage();//获取错误信息。
  26. $pdo->rollBack();//回滚,如果一个地方出现错误,回到总体操作之前。
  27. }
  28.  
  29. ?>
  1. </body>
  2. </html>

3.防止注入

(1)占位方式为?

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>无标题文档</title>
  6. </head>
  7.  
  8. <body>
  1. <?php
  2. //防止sql注入
  3.  
  4. //1.造对象
  5. $dsn = "mysql:dbname=text1;host=localhost";
  6. $pdo = new PDO($dsn,"root","666");
  7.  
  8. //写sql语句,预处理语句。
  9. $sql = "insert into nation values(?,?)";//变量先不写,先用?占住位置。先把这条语句发过去。
  10.  
  11. //准备sql语句,返回statement对象。
  12. $st = $pdo->prepare($sql);
  13.  
  14. /*//绑定参数
  15. $st->bindParam(1,$code);//从1开始索引。
  16. $st->bindParam(2,$name);
  17.  
  18. $code="n002";//也可以在前面赋值。
  19. $name="矮人族";
  20.  
  21. //提交执行
  22. $st->execute();//调用这个方法就可以执行了,括号里面不用给sql语句了,sql语句已经传过去了。
  23. */
  24.  
  25. $attr = array("n007","魔族");//造一个数组,数组里面要和添加的内容对应起来。这2行相当于上面/**/标记的4行内容。
  26.  
  27. //提交执行
  28. $st->execute($attr);//直接把数组放在执行的里面。
  29.  
  30. //预处理里面用?占位的,给数组的时候要给索引数组,并且数组里的内容要和要添加的内容对应起来。
  31.  
  32. ?>
  1. </body>
  2. </html>

(2)占位方式为name

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>无标题文档</title>
  6. </head>
  7.  
  8. <body>
  1. <?php
  2. //防止sql注入
  3.  
  4. //1.造对象
  5. $dsn = "mysql:dbname=text1;host=localhost";
  6. $pdo = new PDO($dsn,"root","666");
  7.  
  8. //写sql语句,预处理语句。使用name占位。
  9. $sql = "insert into nation values(:code,:name)";//前面要加冒号,不加冒号会被当成普通的变量
  10.  
  11. //准备执行
  12. $st = $pdo->prepare($sql);
  13.  
  14. /*//绑定参数
  15. $st->bindParam(":code",$code,PDO::PARAM_STR);//PDO::PARAM_STR表示必须是一个字符串
  16. $st->bindParam(":name",$name,PDO::PARAM_STR);
  17.  
  18. $code="no12";
  19. $name="狼族";
  20.  
  21. //执行
  22. $st->execute();*/
  23.  
  24. $attr = array("code"=>"n025","name"=>"虫族");//name占位,要用关联数组。
  25.  
  26. //执行
  27. $st->execute($attr);
  28.  
  29. ?>
  1. </body>
  2. </html>
  1. 4.读取数据
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>无标题文档</title>
  6. </head>
  7.  
  8. <body>
  1. <?php
  2. //1.造对象
  3. $dsn = "mysql:dbname=text1;host=localhost";
  4. $pdo = new PDO($dsn,"root","666");
  5.  
  6. //写sql语句,预处理语句。使用name占位。
  7. $sql = "select * from nation";//前面要加冒号,不加冒号会被当成普通的变量
  8.  
  9. //准备执行
  10. $st = $pdo->prepare($sql);
  11.  
  12. //执行
  13. $st->execute();
  14.  
  15. //读数据
  16. //var_dump($st->fetch());//输出结果为第一条,可以用while循环全部读取出来。
  17. //var_dump($st->fetch(PDO::FETCH_ASSOC));//输出的是关联数组
  18. //var_dump($st->fetch());//输出二维数组
  19. //var_dump($st->fetch(PDO::FETCH_ASSOC));//输出关联的二维数组
  20. ?>
  1. </body>
  2. </html>

11月7日下午PHP----PDO访问方式操作数据库的更多相关文章

  1. PDO访问方式操作数据库

    mysqli是专门访问MySQL数据库的,不能访问其它数据库.PDO可以访问多种的数据库,它把操作类合并在一起,做成一个数据访问抽象层,这个抽象层就是PDO,根据类操作对应的数据库.mysqli是一个 ...

  2. 11月15日下午 ajax返回数据类型为XML数据的处理

    ajax返回数据类型为XML数据的处理 /*XML:可扩展标记语言 HTML:超文本标记语言 标签:<标签名></标签名> 特点: 1.必须要有一个根 2.标签名自定义 3.对 ...

  3. 11月10日下午 ajax做显示信息以后用ajax、Bootstrp做弹窗显示信息详情

    1.用ajax做弹窗显示信息详情 nation.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu ...

  4. 11月8日下午Jquery取属性值(复选框、下拉列表、单选按钮)、做全选按钮、JSON存储、去空格

    1.jquery取复选框的值 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...

  5. 11月6日下午PHP注册审核(审核状态控制登录、可以更改审核状态)

    1.创建登录界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...

  6. 11月6日下午PHP分页查询(查询结果也显示为分页)

    1.先把数据库里所有的数据分页显示在页面,并在显示数据的表格上方加上查询表单. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...

  7. 11月23日《奥威Power-BI报表集成到其他系统》腾讯课堂开课啦

    听说明天全国各地区都要冷到爆了,要是天气冷到可以放假就好了.想象一下大冷天的一定要在被窝里度过才对嘛,索性明天晚上来个相约吧,相约在被窝里看奥威Power-BI公开课如何?        上周奥威公开 ...

  8. struts2练习时犯的错误(2016年11月4日)

    1.Tomcat启动时报错 严重: 文档无效: 找不到语法. at (null:3:8) org.xml.sax.SAXParseException; systemId: file:/F:/Progr ...

  9. tmux使用——2019年11月20日16:40:15

    1.tmux 命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令.用户与计算机的这种临时的交互,称为一次"会话& ...

随机推荐

  1. 【Windows编程】系列第四篇:使用Unicode编程

    上一篇我们学习了Windows编程的文本及字体输出,在以上几篇的实例中也出现了一些带有“TEXT”的Windows宏定义,有朋友留言想了解一些ANSI和Unicode编程方面的内容,本章就来了解和学习 ...

  2. PPK谈JS笔记第一弹

    以下内容是读书笔记,再一次温习JS好书:PPK谈JS window.load=initializePageaddEventSimple('window','load',function(){}) lo ...

  3. monkeyrunner之录制与回放(七)

    monkeyrunner为我们提供了录制 回放的功能. 录制与回放使用原因:实际项目,需求变更频繁,且测试任务多,我们没有足够时间去写测试脚本,这是就可以进行录制脚本,然后通过回放,跑完需要的流程. ...

  4. CSS/CSS3常用样式小结

    1.强制文本单行显示: white-space:nowrap; 多行文本最后省略号: display: -webkit-box; -webkit-line-clamp:2; overflow: hid ...

  5. POJ3070 Fibonacci[矩阵乘法]

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13677   Accepted: 9697 Descri ...

  6. 5.bootstrap练习笔记-巨幕和流体布局

    bootstrap练习笔记-巨幕和流体布局 1.在bootstrap中 .jumbotron可以设置巨幕效果 2.div.jumnotron自动设置一个黑色的巨幕效果 3.div.container ...

  7. PAT 1032. 挖掘机技术哪家强(20)

    为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过105的正整数N,即参赛人数.随后N行,每行给出一位 ...

  8. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 主管可以看下属的数据

    主管可以看下属的数据,这个是经常用到的一个权限,不管是大公司,还是小公司都需要的功能. 通过以下2个方法,可以任意达到想要的效果了,设置简单灵活,还能递归运算下属,有时候简单好用就是硬道理. #reg ...

  9. StackExchange.Redis 访问封装类

    最近需要在C#中使用Redis,在Redis的官网找到了ServiceStack.Redis,最后在测试的时候发现这是个坑,4.0已上已经收费,后面只好找到3系列的最终版本,最后测试发现还是有BUG或 ...

  10. tomcat7配置虚拟目录

    1.tomcat7的安装路径下,D:\Program Files\java\Tomcat 7.0\conf,修改server.xml文件,如图: 在</Host>标签前,添加上图选中部分即 ...