PDO多种方式取得查询结果
PDO多种方式取得查询结果
- 01 December 2009 1:26 Tuesday
- by Sjolzy
PDO最大的特点之一是它的灵活性,本节将介绍如何取得查询结果,包括:
数组(数值或关联数组);
字符串(单列的结果集);
对象;
回调函数。
1.快取一行
FetchColumn是为应用程序取得一个仅包含单列的数据,代码如下:
$u = $db->query(“SELECT id FROM users WHERE login= |
2.取得一个标准对象
还可以将取得的一行作为一个标准类stdClass的对象实例,其中列名=属性名。
$res = $db->query(“SELECT * FROM foo”); |
3.存取为一个类
PDO允许将结果保存为一个类,例子如下:
$res = $db->query(“SELECT * FROM foo”); |
4.从一个类取得常量
PDO允许查询的结果可以被用来生成一个目的类。
$res = $db->query(“SELECT * FROM foo”); |
5.存取为一个对象
PDO还允许获取数据到一个已经存在的对象。
$u = new userObject; |
6.存取为关联数据
PDO实现了迭代器(Iteator)接口,允许一个方法实现迭代的功能。
$res = $db->query( |
7.fetchAll()方法
PDO也提供了和ADODB类似的fetchAll()方法,它允许从一个结果集中取得数据,然后放于关联数组中。
$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER); |
数字索引数组比较浪费资源,请尽量使用关联数组,这样可以在内存中使用相当密集的大型结果集。
相关说明如下:
setAttribute()方法用于设置部分属性,主要属性有:PDO::ATTR_CASE、PDO::ATTR_ERRMODE等,这里需要设置的是PDO::ATTR_CASE,就是使用关联索引获取数据集时,关联索引是大写还是小写,有如下几个选择:
PDO::CASE_LOWER——强制列名是小写;
PDO::CASE_NATURAL——列名按照原始的方式;
PDO::CASE_UPPER——强制列名为大写。
我们使用setFetchMode方法来设置获取结果集的返回值的数据类型,类型有:
PDO::FETCH_ASSOC——关联数组形式;
PDO::FETCH_NUM——数字索引数组形式;
PDO::FETCH_BOTH——两种数组形式都有,这是默认的;
PDO::FETCH_OBJ——按照对象的形式,类似于以前的 mysql_fetch_object()。
当然,一般情况下,我们使用PDO::FETCH_ASSOC取得关联数组。具体使用哪种类型,应按照自己的实际应用选择。
8.fetchColumn()方法
如果想获取指定记录里的一个字段结果,则可以使用PDOStatement::fetchColumn()。
$rs = $db->query("SELECT COUNT(*) FROM foo"); |
一般使用fetchColumn()方法进行count统计,对某些只需要单字段的记录可以很好地操作。
9.回调函数
PDO还规定在每一个fetch模式下,经过处理后的结果中使用一个回调函数。
function draw_message($subject,$email) { … } |
10.直接查询的问题
直接使用Query查询行每次都会直接提交给数据库,如果查询较多,每次频频查询将导致效率降低。
另外,在安全问题上,没有过滤一些特殊字符容易产生SQL注入。
11.过滤字符
下面我们来看看如何使用PDO进行过滤引起SQL注入的方法,即过滤特殊字符。我们在PDO中使用quote()方法,使用例子如下:
$query = “SELECT * FROM users WHERE |
12.事务处理
PDO驱动程序支持所有的事务数据库,并且PDO提供更简便的方法,如下:
$db->beginTransaction(); |
13.执行一个批处理事务
在下面的示例中,假设我们为一个新雇员创建一组条目,这个雇员有一个ID号,即23。除了输入这个雇员的基本数据外,还需要记录雇员的薪水。分别完成两个更新很简单,但通过将这两个更新包括在beginTransaction()和commit()调用中,就可以保证在更改完成之前,其他人无法看到更改。如果发生了错误,catch块可以回滚事务开始以来发生的所有更改,并打印出一条错误消息。代码内容如下:
try { |
并不是一定要在事务中做出更新,也可以通过复杂的查询来提取数据,还可以使用信息构建更多的更新和查询。当事务在活动时,可以保证其他人在工作进行当中无法做出更改。事实上,这不是100%的正确,但如果您之前没有听说过事务的话,这样介绍也未尝不可。
下面是一个扩展PDO&PDO语句的类,内容如下:
class Database extends PDO{ class DBStatement extends PDOStatement{ |
14.存储过程
在MySQL一章,我们已经了解了存储过程的创建,下面我们来看使用PDO调用的例子:
$stmt = $dbh->prepare("CALL sp_set_string(?)"); |
与先前讲过的绑定例子差不多,只是这里使用了“?”数据绑定方法,sp_set_string是存储过程名称。
带有输出参数的存储过程:
$stmt = $dbh->prepare("CALL sp_get_string(?)"); |
下面是绑定列输出的脚本例子:
$stmt = $dbh->prepare("SELECT extension, name from CREDITS"); |
PDO多种方式取得查询结果的更多相关文章
- sql语句分页多种方式ROW_NUMBER()OVER
sql语句分页多种方式ROW_NUMBER()OVER 摘自: http://www.cnblogs.com/CodingArt/articles/1692468.html 方式一 select to ...
- SQL Server数据库多种方式查找重复记录
摘要:SQL Server是一个关系数据库管理系统,SQL Server数据库的应用是很多的,SQL Server数据库赢得了广大用户的青睐,本文将主要为大家介绍关于SQL Server数据库中查找重 ...
- Python连接MySQL数据库的多种方式
上篇文章分享了windows下载mysql5.7压缩包配置安装mysql 后续可以选择 ①在本地创建一个数据库,使用navicat工具导出远程测试服务器的数据库至本地,用于学习操作,且不影响测试服务器 ...
- sql语句分页多种方式
sql语句分页多种方式ROW_NUMBER()OVER sql语句分页多种方式ROW_NUMBER()OVER 2009年12月04日 星期五 14:36 方式一 select top @pageSi ...
- 《MySQL数据操作与查询》- 维护学生信息、老师信息和成绩信息 支持按多种条件组合查询学生信息和成绩信息
综合项目需求 一.系统整体功能 系统需支持以下功能: 维护学生信息.老师信息和成绩信息 支持按多种条件组合查询学生信息和成绩信息 学生 Student(id,班级id,学号,姓名,性别,电话,地址,出 ...
- idea打包jar的多种方式
这里总结出用IDEA打包jar包的多种方式,以后的项目打包Jar包可以参考如下形式: 用IDEA自带的打包形式 用Maven插件maven-shade-plugin打包 用Maven插件maven-a ...
- Java中测试异常的多种方式
使用JUnit来测试Java代码中的异常有很多种方式,你知道几种? 给定这样一个class. Person.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- Spring学习总结(一)——Spring实现IoC的多种方式
控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法.没有IoC的程序中我们使用面向对象编程对象的创 ...
- java 获取classpath下文件多种方式
java 获取classpath下文件多种方式 一:properties下配置 在resources下定义server.properties register.jks.path=classpath\: ...
随机推荐
- Canvas与Image互相转换
转换 Image为 Canvas要把图片转换为Canvas(画板,画布),可以使用canvas元素 context 的drawImage方法: // 把image 转换为 canvas对象 funct ...
- Python学习推荐
1. Python官网 官网想必是最权威的,不仅有Python 2.X和3.X的软件包,还有官方文档Python tutorial (official docs)及社区. 2. 在线阅读免 ...
- 在Ubuntu中创建与Windows的共享文件夹
在Ubuntu中创建与Windows的共享文件夹 本周的学习需要用到一个压缩包,我从QQ群里下载到了Windows里.虽说我已经安装了虚拟机增强功能,能够与Windows系统共享剪切板,但它也只能共享 ...
- angularjs简述
1.MVC设计模式 MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式 Model(模型)表示应用程序核心(比如数据库记录列表 ...
- zookeeper学习系列:三、利用zookeeper做选举和锁
之前只理解zk可以做命名,配置服务,现在学习下他怎么用作选举和锁,进一步还可构建master-slave模式的分布式系统. 为什么叫Zoo?“因为要协调的分布式系统是一个动物园”. ZooKeeper ...
- iOS开发网络篇—搭建本地服务器
iOS开发网络篇—搭建本地服务器 一.简单说明 说明:提前下载好相关软件,且安装目录最好安装在全英文路径下.如果路径有中文名,那么可能会出现一些莫名其妙的问题. 提示:提前准备好的软件 apache- ...
- Solr安装入门、查询详解
Solr安装入门:http://www.importnew.com/12607.html 查询详解:http://www.360doc.com/content/14/0306/18/203871_35 ...
- 快消零售行业怎么用K2做开关店管理?
提起迪卡侬,想到的便是它汇聚所有运动于同一个屋檐下的盛况.从来没有一家体育用品零售店可以像迪卡侬一样,涵盖几乎所有级别的运动产品.从入门级到最专业的运动产品,应有尽有,不仅产品质量有保证,价格也平易近 ...
- 安装EditPlus
生成注册码:http://www.jb51.net/tools/editplus/ 862C2-DABE8-E30AA-CCE33-65E69
- 单例模式(Singleton Pattern)
动机: 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性.以及良好的效率. 如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例? 这应该是类设 ...