【php】PDO

一、PDO的定义

  1.pdo(php data object)是一个数据库的抽象层

二、PDO的特点

  1.跨数据库

  2.支持预处理

  3.支持事务处理

三、PDO的使用

  1.基本使用

    (1)实例化pdo

      ①数据库类型必须小写

      ②格式:$pdo=new PDO(‘mysql(可替换):host=localhost;dbname=数据库名;charset=utf8‘,‘root‘,‘密码‘);

    (2)发送sql指令

      $pdo->query(sql查询语句)  返回的是对象

      $pdo->exec(sql增、删、改语句)  返回的是手影响行数

    (3)$pdo->errorInfo()  错误信息

      $pdo->lastInsertId()  

  2.处理返回对象的方法

    (1)fetch()返回结果集的下一行,结果指针下移到头返回false

    (2)fetchAll(PDO::FETCH_NUM)返回全部(索引式)    PDO::FETCH_ASSOC关联式      PDO::FETCH_BOTH索引式和关联式

    (3)foreach遍历

  3.预处理

    (1)实例化对象

    (2)发送预处理指令

      $stmt=$pdo->prepare(sql语句,变量部分使用占位符);

      ?  :name  占位符

    (3)绑定参数

      ① ?作为占位符  bindValue(序号,值);

      ② :name作为占位符  bindValue(占位符,变量);

      ③ :name作为占位符  $arr=array(‘占位符‘=>‘值‘);

    (4)执行

      $stmt->execute($arr);

    (5)处理结果

      ① 结果集foreach fetch fetchAll

      ② 受影响行数 rowCount();

 1 //使用数据库抽象层进行预处理操作
 2
 3 //1. 实例化
 4 $pdo = new PDO(‘mysql:host=localhost;dbname=lamp183;charset=utf8‘,‘root‘,‘‘);
 5
 6 //2. 发送预处理指令
 7
 8 //增加
 9 $stmt = $pdo->prepare(‘insert into user (username,password) values (:name,:pass)‘);
10
11 //3. 给预处理指令绑定相应的值
12 //第一种绑定方式
13 // $stmt->bindValue(1,‘qiaojing‘);
14 // $stmt->bindValue(2,‘qiaojing‘);
15
16 //第二种绑定方式
17 // $uname = ‘鸿泽‘;
18 // $upass = ‘鸿泽‘;
19 // $stmt->bindParam(‘:name‘,$uname);
20 // $stmt->bindParam(‘:pass‘,$upass);
21
22 //第三种绑定方式
23 $arr = array(
24             ‘:name‘=>‘召勇‘,
25             ‘:pass‘=>‘召勇‘
26             );
27
28 //4. 执行
29 $stmt->execute($arr);
30
31 //5. 处理结果
32 if($stmt->rowCount()>0){
33     $id = $pdo->lastInsertId();
34     echo ‘添加成功!ID号为:‘.$id;
35 }else{
36     echo ‘添加失败!‘;
37 }
38 // echo $stmt->rowCount();

  4.事务处理

    (1)表的类型必须是innodb

      show create table user;

      alter table user engine=innodb;

    (2)$pdo->beginTransAction();  开启

      $pdo->rollBack();  回滚

        $pdo->commit();  事务结束

 1 //使用PDO抽象类,实现事务处理
 2 //1.实例化
 3 $pdo = new PDO(‘mysql:host=localhost;dbname=lamp183;charset=utf8;‘,‘root‘,‘‘);
 4
 5 //2.发送语句
 6     //(1)开启事务处理
 7     $pdo->beginTransaction();
 8
 9     //(2)修改我自己的数据
10     $num1 = $pdo->exec(‘update user set acount = acount - 100000 where id = 1‘);
11
12     //判断我的修改语句是否有问题
13     if(!$num1){
14         $pdo->rollBack();    //如果事务出现问题,则滚回去
15         die(‘交易失败,请查询后再转钱!‘);
16     }
17
18     //(3)修改别人的数据
19     $num2 = $pdo->exec(‘update user set acount = acount + 100000 where id = 2‘);
20
21     //判断别人的修改语句是否有问题
22     if(!$num2){
23         $pdo->rollBack();
24         die(‘交易失败!转钱的过程当中遇到了问题!‘);
25     }
26
27     //3.处理结果
28     if($num1 && $num2){
29         echo ‘恭喜,交易成功!‘;
30     }
31
32     //(4)结束
33     $pdo->commit();
时间: 2024-10-13 02:01:36

【php】PDO的相关文章

【荐】PDO防 SQL注入攻击 原理分析 以及 使用PDO的注意事项

我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下几个问题: 为什么要使用PDO而不是mysql_connect? 为何PDO能防注入? 使用PDO防注入的时候应该特别注意什么? 一.为何要优先使用PDO? PHP手册上说得很清楚: Prepared statements and stored procedures Many of the more mature databases support the concept of prepared statemen

【Oracle】PHP通过PDO访问oracle数据库

文章目录 虽然LAMP中PHP和MySQL是标准配对,但是公司的项目是MySQL和Oracle分别作为运行库和详单库的,所以PHP连接oracle数据库也是必须要实现的.本篇文章就介绍下如果通过PDO连接到oracle数据库. 同样先说明下我使用到的环境: RedHat(CentOS)6.7 PHP5.6 Oracle11g php5.6的搭建可以参照这里:Oracle在linux环境下的安装可以参考这里 当然,你也可以不安装整个oracle,而只安装instant client来实现:如果是i

【整理】Linux下中文检索引擎coreseek4安装,以及PHP使用sphinx的三种方式(sphinxapi,sphinx的php扩展,SphinxSe作为mysql存储引擎)

一,软件准备 coreseek4.1 (包含coreseek测试版和mmseg最新版本,以及测试数据包[内置中文分词与搜索.单字切分.mysql数据源.python数据源.RT实时索引等测试配置]) Mysql源码包 (必须选择与你已安装mysql的版本一致) 为了避免安装中出现依赖包缺失,你需要打一句鸡血: yum install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel exp

PHP知识大全【高级】

66. 什么是OOP?什么是类和对象?什么是类属性? OOP(object oriented programming),即面向对象编程,其中两个最重要的概念就是类和对象. 世间万物都具有自身的属性和方法,通过这些属性和方法可以区分出不同的物质. 属性和方法的集合就形成了类,类是面向对象编程的核心和基础, 通过类就将零散的用于实现某个功能的代码有效地管理起来了. 类只是具备了某些功能和属性的抽象模型,而实际应用中需要一个一个实体,也就是需要对类进行实例化,类在实例化之后就是对象.★类是对象的抽象概

【转】(笔记)CanOpen协议【CanFestival】移植方法

一.背景 CAN组网就必须得要应用层协议,原因就在于 * 便于网络管理与控制 * 确认数据的收发 * 发送大于8个字节的数据块(CAN每帧数据传输大小为8字节) * 为不同节点分配不同的报文标识符 * 定义帧报文的内容及含义(这在我看来是最主要的原因) * 网络的监控,节点故障的诊断与标识 CAN上层协议有许多,用大家都公认的,便于产品的兼容,因此,CANOpen成为备选项. CANOpen有个开源协议栈[CANFestival],同时有一位大神已经做了移植并记录,在此就厚着脸皮转载过来以做备份

mysql中判断记录是否存在方法比较【转】

把数据写入到数据库的时,常常会碰到先要检测要插入的记录是否存在,然后决定是否要写入. 我这里总结了判断记录是否存在的常用方法: sql语句:select count(*) from tablename; 然后读取count(*)的值判断记录是否存在.对于这种方法性能上有些浪费,我们只是想判断记录记录是否存在,没有必要全部都查出来. 以下这个方法是我推荐的. sql语句:select 1 from tablename where col = col limit 1; 然后读取语句执行所影响的行数.

【转账】MySQL性能优化的最佳20+条经验

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被My

【note】缩写词

CoE CANopen EtherCAT应用程序概要文件CANopen?是一个注册商标的可以自动化汽车集团..纽伦堡.德国CiA402CANopen?驱动器配置文件中指定的IEC 61800-7-201;CANopen?和中央情报局?是可以的注册商标在自动化汽车集团..纽伦堡.德国. csp周期同步位置 csv周期同步速度直流分布式时钟在EtherCAT EoE以太网E SC EtherCAT从属控制器 GPO通用输出数控数字控制 PDI过程数据接口 PDO过程数据对象 PLC可编程序逻辑控制器

【转】php模块参考

———————————————————————————————————————————————————————————————————————————— [转]php模块类参考 <?php//数据库连接类class ConnDB{        var $dbtype;    var $host;    var $user;    var $pwd;    var $dbname;        //构造方法    function ConnDB($dbtype,$host,$user,$pwd