PDO:

PHP Data Object:php的数据对象。
pdo是数据库操作工具类!
1,它能操作很多种数据库,比如mysql,oracle,sybase。。。。
2,它具有操作数据库的更多的功能,比如事务。
3,它能操作各种数据,却有一致语法:即使用pdo,无需考虑不同数据库的sql语句的不同细节写法。
4,带错误处理!
pdo其实一个“类”,我们用的时候,就是new一个pdo对象出来。
在php代码中,操作mysql数据库的基本需求和结果:
1,连接数据库,得到“连接资源”;
2,执行各种sql语句,得到布尔值,或“结果集”;
3,对结果集数据,进行“取用”(通常就是遍历,fetch....)
pdo系统的逻辑结构:

php脚本->PDO数据对象->PDO MySQL引擎 ->MySQL数据库
->PDO Oracle引擎->Oracle数据库
->PDO 其他引擎 ->其他数据库

要想使用(操作)不同的数据库,就需要去php.ini中,打开相应的pdo模块(组件),比如:

并重启apache。

使用PDO

1,连接数据库:
$DSN = "mysql:host=服务器地址/名称;port=端口号;dbname=数据库名";
$Options = array(PDO::MYSQL_ATTR_INIT_COMMAND=>’set names utf8’);
$pdo = new pdo($DSN, "用户名", "密码", $Options);
DSN: Data Source Name ,数据源名称,
2,执行sql语句:
$result1 = $pdo->exec( “增删改语句” ); //
//返回:
数字:表示该语句影响的行数。
false:表示执行失败。
$result2 = $pdo->query( “各种sql语句” );//习惯上query()方法用于执行select这种有数据返回的语句
$result2 结果有:
执行失败: false:
执行成功: 返回结果集——pdo结果集,通常称为pdostatement。
此结果集还需要进一步处理,就像mysql_query()返回结果一样!
3,断开连接——如果需要。
$pdo = null; //就是销毁对象而已。

PDO对象的其他常见操作(方法):

$pdo->lastInsertId(); 获得最后一次自增长的id值
$pdo->beginTransaction(); 开始一个事务
$pdo->commit() 提交一个事务
$pdo->rollBack(); 回滚一个事务
$pdo->setAttribute(属性名,属性值);
在php代码中,要想使用事务,可以这样:

$pdo->beginTransaction();
$pdo->exec( sql语句1);
$pdo->exec( sql语句2);
。。。。
if(如果没有错误){
$pdo->commit();
}
else{
$pdo->rollback();
}

PDO的错误处理

pdo发生的错误,有两种处理模式:

静默模式:
就是发生错误后,并不产生错误提示或输出,而是需要去“人为”通过代码去获取,并判断。
比如:

$pdo -> exec( $sql );        //这条语句,可能出错,也可能不出错!可以做后续判断:
$Code = $pdo->errorCode(); //获取前一次执行sql语句的“错误代号”,如果没有错误,就是0
if($Code == 0){
echo “执行成功”;
} else {
$info = $pdo->errorInfo(); //获取错误信息,但这里结果是一个数组,其中下标为2的就是错误提示内容
echo “失败,请参考错误提示:” . $info[2];
}

异常模式:
是一种特别的语法形式,类似如下:

try{
//这里可以用pdo执行sql语句
//这个范围的语句,一旦出错,就会立即进入catach范围!
$pdo -> exec (“update user_list set user_pass=’456’ where id=16”);
}
catch(Exception $e){
//如果try范围的语句发生错误,就会执行这个catch范围的语句,否则就不会执行
//其中,$e是一个记录的错误信息的“对象”,跟$pdo->errorinfo()类似!处理如下:
echo “失败,请参考错误提示:” . $e->GetMessage();
}
后续代码。。。。

PDO的结果集对象

当使用pdo对象的query()方法,执行一条有返回数据的语句(比如select语句,desc语句,show语句),如果执行成功,返回的就是“pdo结果集对象”。
基本上,可以理解为:该对象中,“存放”了很多数据,我们需要去“取出来”。
对比:
php的原始mysql函数:$result = mysql_qury( “select .....”);
pdo的处理方法: $result = $pdo->query( “select ......”);
他们本质上一样!

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个列的数据(默认是0)
$stmt->errorCode(); //静默模式下,获得出错代号
$stmt->errorInfo();//静默模式下,获得出错信息,是一个数组
$stmt->closeCursor();关闭结果集,清理资源。

我的博客网站:http://www.luanxin.top/index.php/archives/10/

PHP中的PDO数据对象的更多相关文章

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

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

  2. PDO操作大数据对象

    一般在数据库中,我们保存的都只是 int . varchar 类型的数据,一是因为现代的关系型数据库对于这些内容会有很多的优化,二是大部分的索引也无法施加在内容过多的字段上,比如说 text 类型的字 ...

  3. PHP程序中使用PDO对象实现对数据库的增删改查操作的示例代码

    PHP程序中使用PDO对象实现对数据库的增删改查操作(PHP+smarty) dbconn.php <?php //------------------------使用PDO方式连接数据库文件- ...

  4. Flexigrid从对象中加载数据

    (有问题,在找…………) Flexigrid是用来动态加载数据的一种比较好(老)的Jquery表插件,然后有些时候,我们需要其从本地或者jQuery对象中加载数据,比如有这么个需求,页面显示中有两个表 ...

  5. oracle中的数据对象

    oracle中的数据对象有表.视图.索引.序列等 表的相关操作 1.创建表 方式一: 方式二:create table person( create table person1 id number(1 ...

  6. 使用C#中JavaScriptSerializer类将对象转换为Json格式数据

    将对象转换为json格式字符串: private JavaScriptSerializer serializer = new JavaScriptSerializer(); protected voi ...

  7. Redis中的数据对象

    redis对象 redis中有五种常用对象 我们所说的对象的类型大多是值的类型,键的类型大多是字符串对象,值得类型大概有以下几种,但是无论哪种都是基于redisObject实现的 redisObjec ...

  8. ActiveX数据对象之事务控制在VB和DELPHI中的应用

            本文发表在中国人民解放军"信息工程大学"学报 2001年第3期.        ActiveX数据对象之事务控制在VB和DELPHI中的应用             ...

  9. python pickle模块的使用/将python数据对象序列化保存到文件中

    # Python 使用pickle/cPickle模块进行数据的序列化 """Python序列化的概念很简单.内存里面有一个数据结构, 你希望将它保存下来,重用,或者发送 ...

随机推荐

  1. C仿黑白棋版XO棋

    两位玩家轮流在棋盘上放置不同颜色的棋子,一位玩家使用黑子,另一位使用白子,棋盘是一个偶数正方形. 只能将一个棋子放在对手的棋子旁边,使对手在水平.垂直.对角线方向上的棋子变成自己的棋子,游戏结束时,棋 ...

  2. Python_Openpyxl 浅谈(最全总结 足够初次使用)

    https://blog.csdn.net/weixin_43094965/article/details/82226263 import datetime from random import ch ...

  3. Workstation 14 Returns EFI Network Start PXE over IPv4 When Installing New Win10 Guest O/S

    当启动出现“Click any key to boot from DVD”时候,需要键盘点击一下,即可解决. 参考:https://communities.vmware.com/thread/5730 ...

  4. Learning Conditioned Graph Structures for Interpretable Visual Question Answering

    Learning Conditioned Graph Structures for Interpretable Visual Question Answering 2019-05-29 00:29:4 ...

  5. 【E2E】Intel AI DevCloud 的申请和登陆

    参考:https://www.cnblogs.com/WaitingForU/p/9091096.html 一.注册 https://www.cnblogs.com/WaitingForU/p/909 ...

  6. redis最大连接数

    Well, it's a bit late for this post, but since I just spent a lot of time(the whole night) to config ...

  7. Access 字段拼接(UPDATE 数据追加)

    今天遇到一个需求,在Access数据库中,有个net_id 字段,它的值是由 “jjgrape” 这个字符串和 id 字段组成的,也就是说,要把 ‘jjgrape’ 和 id 字段拼接起来: 那怎么拼 ...

  8. 新检出普通web项目爬坑记【我】

    新检出一个普通 web项目, 1.首先发现需要用到的一些代码包没有加到构建目录, 先加入构建: 2.然后发现项目大面积报错, 随便打开代码看下,发现是因为缺少jar包,因为报错的代码太多了,所以使用 ...

  9. ByteBuffer使用实例

    ByteBuffer作为JDK的字节流处理对象,这里举个小例子说明下用法,直接上代码: package com.wlf.netty.nettyserver; import org.junit.Asse ...

  10. 解决:error: Cannot find libmysqlclient_r under /usr/local/mysql.

    libodb-mysql-2.4.0.tar.gz 解压完安装libodb-mysql时,执行完./cofigure后,出现如下错误: checking for libmysqlclient_r... ...