PHP数据库学习之怎样使用PDO获取查询结果?

在之前的文章中给大家带来了《PHP数据库学习之怎样使用PDO执行SQL语句?》,其中详细的介绍了应该怎样使用PDO执行SQL语句的相关知识,本篇我们继续来看一下PHP怎样使用PDO获取查询结果。希望能够帮助到大家!

在之前的文章中给大家带来了《PHP数据库学习之怎样使用PDO执行SQL语句?》,其中详细的介绍了应该怎样使用PDO执行SQL语句的相关知识,本篇我们继续来看一下PHP怎样使用PDO获取查询结果。希望能够帮助到大家!

PHP数据库学习之怎样使用PDO获取查询结果?

php入门到就业线上直播课:进入学习API 文档、设计、调试、自动化测试一体化协作工具:点击使用

在之前的文章中我们已经学会了怎样使用PDO执行SQL语句,那接下来我们来看一看PDO的数据获取方法,PDO的数据获取方法与其他数据库扩展都是非常类似的。

只要成功执行SELECT 查询,就都会有结果集对象生成,不管是使用PDO对象中的qurey()方法还是使用 prepare() 和 execute() 等方法结合的预处理语句,执行 SELECT 查询都会得到结果集对象 PDOStatement。

通过 PDOStatement 类中的方法就可以获取 SELECT 语句的查询结果,接下来我们就来看一下PDOStatement 类中常见的几个获取结果集数据的方法。

fetch() 方法

fetch() 方法可以从一个 PDOStatement 对象的结果集中获取当前行的内容,并将结果集指针移至下一行,当到达结果集末尾时返回 FALSE,该方法的语法格式如下:

PDOStatement::fetch([int $fetch_style[, int $cursor_orientation = PDO::FETCH_ORI_NEXT[, int $cursor_offset = 0]]])登录后复制

其中需要注意的是:

$fetch_style 表示可选参数,用来控制下一行如何返回给调用者。其中这个参数的值必须是 PDO::FETCH_* 系列常量中的一个,如下所示:

  • PDO::FETCH_ASSOC 表示返回一个关联数组;

  • PDO::FETCH_BOTH(默认) 表示返回一个索引数组加关联数组混合的数组

  • PDO::FETCH_BOUND 表示返回 TRUE,并分配结果集中的值给 PDOStatement::bindColumn() 方法绑定的 PHP 变量

  • PDO::FETCH_OBJ 表示返回一个属性名对应结果集列名的匿名对象。

  • PDO::FETCH_CLASS:返回一个请求类的新实例,映射结果集中的列名到类中对应的属性名。

如果 fetch_style 包含 PDO::FETCH_CLASSTYPE 例如:PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE,则类名由第一列的值决定;

$cursor orientation 表示可选参数,用来确定当对象是一个可滚动的游标时应当获取哪一行。此值必须是 PDO::FETCH_ORI_* 系列常量中的一个,默认为 PDO::FETCH_ORI_NEXT。

$offset 表示可选参数,当参数 $cursor_orientation 设置为 PDO::FETCH_ORI_ABS 时,此值指定结果集中想要获取行的绝对行号;当参数 $cursor_orientation 设置为 PDO::FETCH_ORI_REL 时,此值指定想要获取行相对于调用 PDOStatement::fetch() 前游标的位置。

接下来我们通过示例来看一下使用 fetch() 方法,获取 SELECT 语句的查询结果。示例如下:

query($sql);
echo ;;;
while ($row = $res -> fetch(PDO::FETCH_ASSOC)){
print_r($row);
}
}catch(PDOException $e){
echo ;数据库连接失败:;.$e -> getMessage();
}
?>登录后复制

输出结果:

PHP数据库学习之怎样使用PDO获取查询结果?

由此我们便通过fetch() 方法完成了从一个 PDOStatement 对象的结果集中获取当前行的内容。$offset 表示可选参数,当参数 $cursor_orientation 设置为 PDO::FETCH_ORI_ABS 时,此值指定结果集中想要获取行的绝对行号;当参数 $cursor_orientation 设置为 PDO::FETCH_ORI_REL 时,此值指定想要获取行相对于调用 PDOStatement::fetch() 前游标的位置。

接下来我们看一下fetchAll() 方法的应用。

fetchAll() 方法

fetchAll() 方法与上面介绍的 fetch() 方法类似,但是该方法只需要调用一次就可以获取结果集中的所有行,并赋给返回的数组。该方法的语法格式如下:

PDOStatement::fetchAll([int $fetch_style[, mixed $fetch_argument[, array $ctor_args = array()]]])登录后复制

其中需要注意的是:

$fetch_style 表示可选参数,用来控制返回数组的内容,默认值为 PDO::FETCH_BOTH。该参数的取值与 fetch() 方法相同

$fetch_argument 根据 $fetch_style 参数的值,此参数有不同的意义:

  • PDO::FETCH_COLUMN:返回指定以 0 开始索引的列;

  • PDO::FETCH_CLASS:返回指定类的实例,映射每行的列到类中对应的属性名;

  • PDO::FETCH_FUNC:将每行的列作为参数传递给指定的函数,并返回调用函数后的结果。

$ctor_args 表示当 $fetch_style 参数为 PDO::FETCH_CLASS 时,自定义类的构造函数的参数。

接下来我们通过示例来看一下fetchAll() 方法的实际应用,示例如下:

query($sql);
$data = $res -> fetchAll(PDO::FETCH_ASSOC);
echo ;;;
print_r($data);
}catch(PDOException $e){
echo ;数据库连接失败:;.$e -> getMessage();
}
?>登录后复制

输出结果:

PHP数据库学习之怎样使用PDO获取查询结果?

由此我们便通过使用 fetchAll() 方法,获取 SELECT 语句的查询结果。$ctor_args 表示当 $fetch_style 参数为 PDO::FETCH_CLASS 时,自定义类的构造函数的参数。

接下来我们看一下fetchColumn() 方法的使用。

fetchColumn() 方法

fetchColumn() 方法可以获取结果集中当前行指定字段的值,其语法格式如下:

PDOStatement::fetchColumn([int $column_number = 0])登录后复制

其中需要注意的是:

参数 $column_number表示的是想从行里取回的列的索引数字。

如果该参数没有取值,也就是如果没有提供值,那么则会从第一列开始获取。

接下来我们通过示例来看一下fetchColumn() 方法的使用,示例如下:

query($sql);
echo ;当前行第一列的值为:;.$res -> fetchColumn().;;;
echo ;当前行第三列的值为:;.$res -> fetchColumn(2).;;;
echo ;当前行第二列的值为:;.$res -> fetchColumn(1).;;;
}catch(PDOException $e){
echo ;数据库连接失败:;.$e -> getMessage();
}
?>登录后复制

输出结果:

PHP数据库学习之怎样使用PDO获取查询结果?

由此我们便通过使用 fetchColumn() 方法,获取指定字段的值。

大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。

php pdo参数化查询怎么实现

原创2021-09-20 10:16:51941 + php学习QQ群(点击入群)

在PHP中可以通过prepare方法进行PDO参数化查询,该方法会返回一个PDOStatement对象,使用语法如“prepare('SELECT login_oid FROM logined WHERE user_id=…”。

PHP数据库学习之怎样使用PDO获取查询结果?

php入门到就业线上直播课:进入学习API 文档、设计、调试、自动化测试一体化协作工具:点击使用

本文操作环境:Windows7系统、PHP7.1、Dell G3电脑。

php pdo参数化查询怎么实现?

PDO参数化查询prepare() php防SQL注入

PDO中参数化查询主要用到prepare()方法,然后这个方法会返回一个PDOStatement对象,也就SQL声明(不知道怎么翻译),此时SQL语句只是被编译,但并未执行,调用PDOStatement中方法后会执行SQL语句,如下示例:

$sm = $db->prepare('SELECT login_oid FROM logined WHERE user_id=:user_id;');
$sm->bindValue(':user_id', $user_id, PDO::PARAM_INT);
$sm -> execute();登录后复制

在execute()执行前,就可以调用bindValue()或者bindParam()方法替换之前准备的SQL语句中的你指定参数了,在SQL语句中指定参数有两种方式:':name’和’?’,上面代码中的用的是前一种,后一种的方式是:

$sm = $db->prepare('SELECT * FROM fruit WHERE calories bindValue(1, $calories, PDO::PARAM_INT);
$sm->execute();登录后复制

bindValue()有三个参数,第一个指定要替换掉SQL语句中哪一个参数,第二个指定替换后的值,第三个指定值的类型,类型对应如下:

PDO::PARAM_BOOL登录后复制

布尔类型

PDO::PARAM_NULL登录后复制

NULL类型

PDO::PARAM_INT登录后复制

整数类型

PDO::PARAM_STR登录后复制

字符串类型如 CHAR, VARCHAR, string

PDO::PARAM_LOB登录后复制

资源类大对象,如文件等

PDO::PARAM_STMT登录后复制

不知道

PDO::PARAM_INPUT_OUTPUT登录后复制

这个好像是扩展类型

里面没有提供实数类型,这个很诧异.

再说说execute()这个方法,它本身也可以做参数替换,但是它会把所有值的类型都变成字符串类型,如下

$sm = $db->prepare('SELECT * FROM fruit WHERE calories execute(array($calories));登录后复制

多参数替换如下

$sm = $db->prepare('SELECT * FROM fruit WHERE calories < ?, id execute(array($calories, $user_id));登录后复制

以上就是php pdo参数化查询怎么实现的详细内容,更多请关注钦钦技术栈其它相关文章!

转载至:php中文网【www.php.cn】

版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/27230/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022-09-29 5:07:31
下一篇 2022-09-29 5:08:15

软件定制开发公司

相关阅读

发表回复

登录后才能评论
通知:禁止投稿所有关于虚拟货币,币圈类相关文章,发现立即永久封锁账户ID!