PDO是什么呢?

  通俗说就是别人写的一个“数据库操作工具类”,它非常强大,可以应对市面上几乎所有主流数据库,

具体应用时候有这样一个关系:

  即,要操作某种数据,就得去“打开”对应的pdo引擎。

在php.ini的配置文件中,无非就是一个“模块”而已,我们只需要把分号删掉就表示开启!如下:

改为:

使用pdo连接mysql数据库

  1. $dsn = "mysql:host=服务器地址/名称;port=端口号;dbname=数据库名";
  2. $opt = array(PDO::MYSQL_ATTR_INIT_COMMAND=>’set names 连接编码’);
  3. $pdo = new pdo($dsn, "用户名", "密码", $opt);

可见,返回的是一个pdo对象,

pdo对象的使用(常见方法)

$result = $pdo->query(“返回结果集的sql语句”);

结果:

成功:就是一个pdo结果集对象(见后续);

失败:false;

$result = $pdo->exec(“增删改的sql语句”);

结果: true(表示成功),false(表示失败);

$pdo = null; //销毁该对象;

其他操作

  • $pdo->lastInsertId();

获取最后添加的id值

  • $pdo->beginTransaction();:

开启一个事务

  • $pdo->commit()

提交一个事务

  • $pdo->rollBack();

回滚一个事务;

  • $pdo->inTransaction();

判断当前行是否在事务中,返回true/false

  • $pdo->setAttribute(属性名,属性值);

设置pdo对象的属性值;

举例:$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)

pdo的错误处理

  • 静默模式

  默认情况下,pdo采用“静默模式”处理错误:

就是发生了错误后,并不提示,而只是返回false。我们需要在程序中去判断返回是否为fale,然后,如果是false,再去“主动”获取错误信息。——跟mysql一样!

对比mysql:

$sql  = “updateeeee  tab  set  name = ‘abc'; ”;

$result  =  mysql_query($sql); //这里,执行该sql语句,肯定出错

if( $result  ===  false){

  echo “发生错误:”  .  mysql_error();

}

else{......}

则对pdo来说,大致如此:

$sql  = “updateeeee  tab  set  name = ‘abc’  ; ”;

$result  =  $pdo->exec ($sql); //这里,执行该sql语句,肯定出错

if( $result  ===  false){

echo “发生错误:”  .  $pdo->errorInfo(); //这里只是示意;

//实际情况是:$pdo->errorInfo()返回的是一个“数组”,其中的下标为3的项,才是错误提示内容

}

else{......}

  • 异常模式

  可以简单理解为:适应面向对象语法的处理错误的一种语法结构。如下所示:

try{

在这里,可以执行“可能出错”的语句(多条也可以);

一旦发生错误,就会终止当前范围的后续程序执行,

而立即跳转到catch部分——处理错误!

}

catch( Exception  $e ){

//一旦发生错误,就会进入这里,此时,并会生成一个“错误对象”;

//该错误对象,就是系统类Exception的一个实例:它包含了错误信息。

}

  pdo要使用异常模式,就得专门设置(因为其默认是静默模式):

pdo的结果集对象(PDOStatement)

pdo的结果集对象从哪里来?

  来自pdo对象执行“返回数据集的sql语句”并成功的时候,得到的就是pdo的结果集对象。

$stmt  =  $pdo->query(“select ..... “); //如果执行成功,则$stmt就是pdo的结果集对象

pdo结果集对象的常用方法

  • $stmt = $pdo->query(“select ...... ”);//这是获得结果集
  • $stmt->rowCount() ; //得到结果集的行数
  • $stmt->columnCount() ; //得到结果集的列数
  • $stmt->fetch( [返回类型] ); //从结果集中取出“一行”数据;

取出的结果,由其中的“返回类型”来决定,常用的有:

PDO::FETCH_ASSOC:表示关联数组
PDO::FETCH_NUM:表示索引数组
PDO::FETCH_BOTH:表示前二者皆有,这是默认值
PDO::FETCH_OBJ:表示对象

  • $stmt->fetchAll([返回类型]);一次性获取结果集中的所有数据,返回的是一个二维数组
  • $stmt->fetchColumn( [$i] );获取结果集中的“下一行”数据的第$i个字段的值,结果是一个“标量数据”
  • $stmt->fetchObject();
  • $stmt->errorCode();:pdo结果集的错误代号
  • $stmt->errorInfo();  pdo结果集的错误信息(是一个数组)
  • $stmt->closeCursor(); 关闭结果集(相当于mysql_close()  )

pdo中的预处理语法

什么叫预处理语法

  就是,为了“重复执行”多条结构类似的sql语句,而将该sql语句的形式“进行预先处理”(编译);

该sql语句的“形式”中,含有“未给定的数据项”。

  然后,到正式执行的时候,只要给定相应的形式上的“数据项”,就可以更快速方便执行。

比如(有两种预定义语法):

语法1:

$sql = “select  *  from  tab   where  id = ? “; //这里这个“?”就是未给定的数据项;这里通常叫做“占位符”

//也可以是多个问好。

语法2:

$sql = “select  *  from  tab   where  id = :v1  and  name  =  :v2 “; //这里这个“:v1”和 “:v2” 就是未给定的数据项;通常这里叫做“命名参数”;

怎么使用?

分3步:

1,对含预处理语法的sql语句进行“预处理”:

$stmt = $pdo->prepare( $sql ); //

2, 对上述预处理的结果对象($stmt)的未赋值数据,进行赋值:

$stmt->bindValue( 数据项1, 值1);

$stmt->bindValue( 数据项2, 值2);

。。。。。。

3, 执行;

$stmt->execute();

这样之后,该sql语句就算正式完成!

php类模块引擎PDO操作MySQL数据库简单阐述的更多相关文章

  1. Python工具类(一)—— 操作Mysql数据库

    如何调用直接看__main__函数里如何调用此工具类就阔以啦! # encoding=utf-8 import pymysql # 导入所有Mysql配置常量,请自行指定文件 from conf.se ...

  2. PDO操作mysql数据库(一)

    PHP连接mysql数据库: <?php$server = "localhost";$user = "root";$pwd = "123456& ...

  3. PDO操作mysql数据库(二)

    从 MySQL 数据库读取数据 <?php $server = "localhost"; $user = "root"; $pwd = "123 ...

  4. MySQL原生API、MySQLi面向过程、MySQLi面向对象、PDO操作MySQL

    [转载]http://www.cnblogs.com/52fhy/p/5352304.html 本文将举详细例子向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对 ...

  5. PDO连接mysql数据库

    1.PDO简介 PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接 ...

  6. python操作三大主流数据库(1)python操作mysql①windows环境中安装python操作mysql数据库的MySQLdb模块mysql-client

    windows安装python操作mysql数据库的MySQLdb模块mysql-client 正常情况下应该是cmd下直接运行 pip install mysql-client 命令即可,试了很多台 ...

  7. Python MySQLdb模块连接操作mysql数据库实例_python

    mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法.python操作数据库需要安装一个第三方的模块,在http://mysql ...

  8. php之PDO连接mysql数据库,增删改查等等操作实例

    我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严就有SQL注入风险,导致网站被攻击. 虽然可以用mysql_real_escape_string ...

  9. 【tips】ORM - SQLAlchemy操作MySQL数据库

    优先(官方文档SQLAlchemy-version1.2): sqlalchemy | 作者:斯芬克斯 推荐一(长篇幅version1.2.0b3):python约会之ORM-sqlalchemy | ...

随机推荐

  1. MonkeyRunner原理初步--Android自动化测试学习历程

    章节:自动化基础篇——MonkeyRunner原理初步 主要讲解内容及笔记: 一.理论知识和脚本演示 最佳方式是上官网文档去查看monkeyrunner的介绍,官网上不去,就找了一个本地的androi ...

  2. 安装Oracle客户端寻找配置文件tnsnames.ora

    # tnsnames.ora Network Configuration File: D:\app\Administrator\product\11.2.0\dbhome_1\network\admi ...

  3. HashMap的hash冲突解决方案

    Hash函数 非哈希表的特点:关键字在表中的位置和它之间不存在一个确定的关系,查找的过程为给定值一次和各个关键字进行比较,查找的效率取决于和给定值进行比较的次数. 哈希表的特点:关键字在表中位置和它之 ...

  4. php反射机制学习

    PHP 5 具有完整的反射 API,可以通过反射机制来获取类,接口,函数的详细信息.例如可以通过反射api的成员属性,成员方法,命名空间的名称,检测某个类是否为抽象类等操作.(欢迎指点) 一般用途是在 ...

  5. MVC扩展HtmlHelper,加入RadioButtonList、CheckBoxList、DropdownList

    代码: using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions ...

  6. Window 编码 UTF-8 BOM 说明

    UTF-8 不需要 BOM,尽管 Unicode 标准允许在 UTF-8 中使用 BOM.所以不含 BOM 的 UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯(顺便提一 ...

  7. Jmeter报文体包含过大附件导致请求报文发送失败的解决办法

    Jmeter中,HTTP request的报文体为一个附件时,如果附件过大,在发送请求报文的时候会失败,办法就是勾选“Use multipart/form-data for POST”

  8. OSGi 系列(十三)之 Configuration Admin Service

    OSGi 系列(十三)之 Configuration Admin Service OSGi 的 CM 就是 Configuration Admin Service,是用于管理 Bundle 属性.并在 ...

  9. 2018.08.30 NOIP模拟 wall(模拟)

    [问题描述] 万里长城是中国强大的标志,长城在古代的用途主要用于快速传递军事消息和抵御 外敌,在长城上的烽火台即可以作为藏兵的堡垒有可以来点燃狼烟传递消息. 现在有一段 万里长城,一共有 N 个烽火台 ...

  10. 笔记本的Windows系统怎么设置有了外接鼠标后停用触摸板

    点击控制面板,切换小图标模式,找到鼠标,点击它,然后会弹出一个窗口,找到ELAN选项卡(一般有个红色图标,不过可能需要对应驱动才会有此选项卡),选中插入外置 USB 指向装置时禁用.点击确定保存配置即 ...