摘要:虽然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 '
';  
foreach($stmt as $row){
print_r($row);
}
}catch(PDOException $e){
echo $e->getMessage();
}

wireshare 如何抓数据库账号和密码 数据库抓取数据_结果集

从案例中可以发现,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();
}

wireshare 如何抓数据库账号和密码 数据库抓取数据_sql_02

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 '
';  
//}
//}
$rows=$stmt->fetchAll();
echo "
  
";
  
var_dump($rows);
//var_dump($stmt);
}catch(PDOException $e){
echo $e->getMessage();
}

wireshare 如何抓数据库账号和密码 数据库抓取数据_SQL_03

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();
}

wireshare 如何抓数据库账号和密码 数据库抓取数据_sql_04

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

AULT_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:返回一个属性名对应结果集列名的匿名对象

wireshare 如何抓数据库账号和密码 数据库抓取数据_sql_05