本文作者:心月

PDO数据库查询及结果集获取方法操作

心月IT博客 2019-03-28
PDO数据库查询及结果集获取方法操作摘要:虽然exec()方法对select语句无效,但我们可以用pdo的其他方法来查询数据库数据,query()、prepare()都可以 执行数据库查询语句,然后通过这两个方法返回的PDOStatement对象获取查询结果集。

1、数据查询

    ①query

    query()执行一条SQL语句,返回PDOStatement对象,也就是说query()不仅可以执 行select语句,同样可以执行其他类型的SQL语句。

    下面我们用实例来演示query()执行select语句。

<?php 
header('content-type:text/html;charset=utf-8');
try{
	$pdo=new PDO('mysql:host=localhost;dbname=test','root','root');
	$sql='select * from test_pdo where id=15';
	$stmt=$pdo->query($sql);
	var_dump($stmt);
	echo '<hr/>';
	foreach($stmt as $row){
		print_r($row);
	}
}catch(PDOException $e){
	echo $e->getMessage();
}

query执行select查询语句

从案例中可以发现,query的使用非常简单,只要会写原生的mysql语句,然后把sql当参数传给query()就可以 拿到我们想要的结果了。

    ②prepare()和execute()预处理查询

    预处理对数据库操作来说非常重要,PDO同样可以通过预处理来执行SQL语句,确保 数据库数据安全。

prepare()准备执行一条SQL语句,返回PDOStatement

通过prepare()返回的PDOStatement对象中的execute()来执行SQL,如果执行成功则返回true,执行失败返回 false,如果要获取预处理查询语句的结果集需要PDOStatement对象的fetch()方法或者fetchAll()方法获取

<?php 
header('content-type:text/html;charset=utf-8');
try{
	$pdo=new PDO('mysql:host=localhost;dbname=test','root','root');
	$sql='select * from test_pdo where username="testuser1"';
	//prepare($sql):准备SQL语句
	$stmt=$pdo->prepare($sql);
	//execute():执行预处理语句
	$res=$stmt->execute();
	//var_dump($res);
	//fetch():得到结果集中的一条记录
	$row=$stmt->fetch();
	print_r($row);
	
	//var_dump($stmt);
}catch(PDOException $e){
	echo $e->getMessage();
}

prepare预处理

2、fetch/fetchAll 获取结果集

fetchAll()获取所有查询结果集

<?php 
header('content-type:text/html;charset=utf-8');
try{
	$pdo=new PDO('mysql:host=localhost;dbname=test','root','root');
	$sql='select * from user';
	$stmt=$pdo->prepare($sql);
	$res=$stmt->execute();
//	if($res){
//		while($row=$stmt->fetch()){
//			var_dump($row);
//			echo '<hr/>';
//		}
//	}
	$rows=$stmt->fetchAll();
	echo "<pre>";
	var_dump($rows);
	
	//var_dump($stmt);
}catch(PDOException $e){
	echo $e->getMessage();
}

fetchAll()获取查询数据结果集

fetch 从结果集中获取下一行

<?php 
header('content-type:text/html;charset=utf-8');
try{
	$pdo=new PDO('mysql:host=localhost;dbname=test','root','root');
	$sql='select * from test_pdo where id=17';
	$stmt=$pdo->prepare($sql);
	$res=$stmt->execute();

	$rows=$stmt->fetch();
	var_dump($rows);
}catch(PDOException $e){
	echo $e->getMessage();
}

fetch从结果集中获取下一行

在用fetch()或fetchAll()获取结果集时可以通过传递参数设定获取结果的类型,传递的参数必须是 PDO::FETCH_* 系列常量中的一个,缺省为 PDO::ATTR_DEFAULT_FETCH_MODE 的值 (默认为 PDO::FETCH_BOTH )

#fetch()、fetchAll() 可传递的参数:
PDO::FETCH_ASSOC:返回一个索引为结果集列名的数组
PDO::FETCH_BOTH(默认):返回一个索引为结果集列名和以0开始的列号的数组
PDO::FETCH_BOUND:返回 TRUE ,并分配结果集中的列值给 PDOStatement::bindColumn() 方法绑定的 PHP 变量。
PDO::FETCH_CLASS:返回一个请求类的新实例,映射结果集中的列名到类中对应的属性名。如果 fetch_style 包含 PDO::FETCH_CLASSTYPE(例如:PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE),则类名由第一列的值决定
PDO::FETCH_INTO:更新一个被请求类已存在的实例,映射结果集中的列到类中命名的属性
PDO::FETCH_LAZY:结合使用 PDO::FETCH_BOTH 和 PDO::FETCH_OBJ,创建供用来访问的对象变量名
PDO::FETCH_NUM:返回一个索引为以0开始的结果集列号的数组
PDO::FETCH_OBJ:返回一个属性名对应结果集列名的匿名对象

获取查询结果集可以传递的参数


文章版权及转载声明:

本文由 心月IT技术博客 博主整理于 2019-03-28
若转载请注明原文及出处:https://www.xinyueseo.com/other/214.html

分享到:
赞(
发表评论
快捷输入:

验证码

    评论列表 (有 0 条评论,人围观)参与讨论