1.可以访问其它数据库
2.具有事务功能
3.带有预处理语句功能(防止SQL注入攻击)

访问数据库

PDO::__construct ( string $dsn [, string $username [, string $password [, array $driver_options ]]] )

$dsn = 'mysql:dbname=testdb;host=127.0.0.1' ;

例:

  1. <?php
  2. //1.造PDO对象
  3. $dsn ="mysql:dbname=mydb;host=localhost";
  4. $pdo = new PDO($dsn,"root","root");
  5. //2.写SQL语句
  6. $sql = "select * from nation";
  7. //3.执行SQL语句
  8. $stm = $pdo->query($sql);
  9. //4.从PDOStatement对象里面读数据
  10. $arr = $stm->fetch(PDO::FETCH_ASSOC);
  11. var_dump($arr);
  12.  
  13. ?>
  1. <?php
  2.  
  3. $dsn ="mysql:dbname=mydb;host=localhost";
  4. $pdo = new PDO($dsn,"root","root");
  5. $sql = "insert into nation values('002','毛毛')";
  6. $arr = $pdo->exec($sql);
  7. var_dump($arr);
  8.  
  9. ?>

PDOStatement::fetch从结果集中获取下一行

  • PDO::FETCH_ASSOC:返回一个索引为结果集列名的数组

  • PDO::FETCH_BOTH(默认):返回一个索引为结果集列名和以0开始的列号的数组

  • PDO::FETCH_NUM:返回一个索引为以0开始的结果集列号的数组

  • PDO::FETCH_OBJ:返回一个属性名对应结果集列名的匿名对象

事务功能(在事务里面的内容,要么全部执行,要么都不执行。例如转账,这边扣钱,对方就得收到钱;而不能这边扣钱了,对方没收到钱。)

  1. <?php
  2.  
  3. //beginTransaction 启动事务
  4. //commit 提交事务
  5. //rollback 回滚
  6.  
  7. $dsn = "mysql:dbname=mydb;host=localhost";
  8. $pdo = new PDO($dsn,"root","root");
  9.  
  10. //将PDO的错误类型设置为异常模式
  11. $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
  12.  
  13. try
  14. {
  15. //开启事务
  16. $pdo->beginTransaction();
  17.  
  18. $sql1 = "insert into nation values('082','数据')";
  19. $sql2 = "insert into nation values('084','的库')";
  20. $sql3 = "insert into nation values('083','帅哥')";
  21.  
  22. $pdo->exec($sql1);
  23. $pdo->exec($sql2);
  24. $pdo->exec($sql3);
  25.  
  26. //提交事务
  27. $pdo->commit();
  28. }
  29. catch(Exception $e)//抓取操作
  30. {
  31. //回滚操作
  32. $pdo->rollBack();
  33. }
  34. /*final
  35. {
  36. //最终执行,无论有没有异常出现,该代码都会执行
  37. }*/
  38.  
  39. ?>

带有预处理功能

第一种方式(其中的?多了,看的眼花)

  1. <?php
  2.  
  3. $dsn = "mysql:dbname=mydb;host=localhost";
  4. $pdo = new PDO($dsn,"root","root");
  5.  
  6. //写一个预处理语句
  7. $sql = "insert into nation values(?,?)";
  8. //将预处理语句扔到服务器等待执行,返回PDOStatement对象
  9. $stm = $pdo->prepare($sql);
  10.  
  11. //第二次将变量(参数)扔到服务器的SQL语句相应位置,给预处理语句绑定参数
  12. /*$stm->bindParam(1,$code);
  13. $stm->bindParam(2,$name);
  14. $code = "n085";
  15. $name = "天族";
  16. */
  17.  
  18. //定义索引数组
  19. $arr = array("n082","数据");
  20.  
  21. //执行
  22. $stm->execute($arr);
  23. ?>

第二种方式(一般采用这种方式)

  1. <?php
  2.  
  3. $dsn = "mysql:dbname=mydb;host=localhost";
  4. $pdo = new PDO($dsn,"root","root");
  5.  
  6. //预处理语句
  7. $sql = "insert into nation values(:code,:name)";
  8. $stm = $pdo->prepare($sql);
  9.  
  10. //绑定参数
  11. /*$stm->bindParam(":code",$code);
  12. $stm->bindParam(":name",$name);
  13. $code = "n070";
  14. $name = "神族";*/
  15.  
  16. //造一个数组
  17. $arr = array("code"=>"n071","name"=>"胜率");
  18.  
  19. //执行
  20. $stm->execute($arr);
  21.  
  22. ?>

例:

第一个页面

  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>
  9. <h1>添加数据</h1>
  10. <form action="chuli.php" method="post">
  11. <div>代号:<input type="text" name="code" /></div>
  12. <div>名称:<input type="text" name="name" /></div>
  13. <input type="submit" value="添加" />
  14. </form>
  15. </body>
  16. </html>

第二个页面

  1. <?php
  2.  
  3. $dsn = "mysql:dbname=mydb;host=localhost";
  4. $pdo = new PDO($dsn,"root","root");
  5.  
  6. //预处理语句
  7. $sql = "insert into nation values(:code,:name)";
  8. $stm = $pdo->prepare($sql);
  9.  
  10. //执行
  11. $stm->execute($_POST);

第二个页面中的:值最好与第一个页面的提交过来的name名字一样,这样后面执行的时候就能直接取_POST了

PDO(PHP Data Object)数据访问抽象层的更多相关文章

  1. php PDO:数据访问抽象层

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. PDO数据访问抽象层

    PDO数据访问抽象层: 我们使用的mysqli是针对mysql这个数据库扩展的一个类,如果要用到别的数据库的话就可以用PDO来做 1.操作数据库 先来代码 <!--PDO--> <! ...

  3. PDO(数据访问抽象层)、pdo事务功能和预处理功能---2017-05-05

    之前所学的数据访问都是用mysqli做成类来访问的,但是mysqli这个类只是针对mysql这个数据库的:那么如果访问其他类型的数据库呢? 那么这就用到了PDO(数据访问抽象层). 一.关于PDO基本 ...

  4. PHP中关于PDO数据访问抽象层的功能操作

    PDO:数据访问抽象层 具有三大特点: 1.可以访问其它数据库  所有数据库都可以 2.具有事务功能 3.带有预处理语句功能(防止SQL注入攻击) 实例操作代码如下: <?php //1.造PD ...

  5. PDO:数据访问抽象层

    <?php //PDO:数据访问抽象层 //带有事务功能: //dsn:数据源 $dsn="mysql:host=localhost;dbname=aaas"; //造pdo ...

  6. PDO(数据访问抽象层)

    自带事务功能,多条sql同时执行时,如果其中一条执行失败,那么所有的都执行失败.开启了事务,可以进行回滚操作,让程序变得更安全. 1.访问不同的数据库2.自带事务功能3.防止SQL注入:分两次发送 / ...

  7. php 之 PDO数据访问抽象层(0513)

    PDO(PHP Data Objects)是一种在PHP里连接数据库的使用接口. PDO与mysqli曾经被建议用来取代原本PHP在用的mysql相关函数, 基于数据库使用的安全性,因为后者欠缺对于S ...

  8. PDO数据访问抽象层(上)

    PDO比MySQLi功能强大 PDO可以访问MySQL及其它数据库 一.造对象 <?php $dsn = "mysql:dbname = crud;host = localhost&q ...

  9. PDO 数据访问抽象层

    1.操作其它数据库 (1)造对象 $dsn = "mysql:dbname=test3;host=localhost"; //数据源:两个参数:数据库驱动,链接数据库 $pdo = ...

随机推荐

  1. UVa 103 - Stacking Boxes

    题目大意:矩阵嵌套,不过维数是多维的.有两个个k维的盒子A(a1, a1...ak), B(b1, b2...bk),若能找到(a1...ak)的一个排列使得ai < bi,则盒子A可嵌套在盒子 ...

  2. UVa 129 困难的串

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  3. docker mac 安装并初始化GO环境

    mac 环境下,安装docker 下载链接:https://download.docker.com/mac/stable/Docker.dmg 下载完毕后,直接双击安装,下一步直到最后 创建docke ...

  4. ssh框架整合log4j

    这个是摘录的别人博客的地址,请点击下面的链接...... http://www.cnblogs.com/rushoooooo/archive/2011/08/29/2157361.html

  5. 按ctrl + c 播放下一曲音乐

    ./a.out . #include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<dirent. ...

  6. ThinkPHP 3 MVC模式和URL访问

    一.什么是MVC                 //了解    M -Model 编写model类 对数据进行操作    V -View  编写html文件,页面呈现    C -Controlle ...

  7. 【angularjs】【学习心得】路由实战篇

    今天还是来说一下angular中的路由模块.我们实际项目中,各个页面的切换是经常会与Auth相关的.比如我网站的后台,是需要登录过的用户才能进去,那么我们用angularJS做前端路由的时候应该怎么完 ...

  8. [ Android 五种数据存储方式之二 ] —— 文件存储数据

    关于文件存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的. 文件可用来存放大量数据,如文本.图片.音 ...

  9. U盘安装系统

    http://www.ushendu.com/usdpzxt/1566.html http://www.ushendu.com/plus/view.php?aid=1571 http://www.ud ...

  10. Chrome中java因过期而遭到阻止

    http://www.cnblogs.com/jifeng/p/3453322.html 在Chrome快捷方式图标上右击,选[属性],然后在[目标]一栏的末尾添加这么一段命令(flag): --al ...