• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

三分钟带你了解PHP中的查询结构集

php 搞代码 4年前 (2022-01-04) 26次浏览 已收录 0个评论
文章目录[隐藏]

本篇文章给大家介绍一下PHPPHP中的查询结构集。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

PHP中的PDO操作学习(四)查询结构集

关于 PDO 的最后一篇文章,我们就以查询结果集的操作为结束。在数据库的操作中,查询往往占的比例非常高。在日常的开发中,大部分的业务都是读多写少型的业务,所以掌握好查询相关的操作是我们学习的重要内容。和 mysqli 一样,PDO 对于查询的支持也是非常方便快捷的,通过几个函数就可以非常方便高效地操作各种查询语句。

在使用预处理语句的情况下,我们使用 execute() 执行之后,查询的结果集就会保存在 PDOStatement 对象中。对于数据的操作就转移到了 PHP 的对象中,所以我们需要 PDOStatement 的一些方法来获得结果集的内容。

fetch() 方法

通过 fetch() 方法,获得的是查询结果集的下一行。

$stmt = $pdo->prepare("select * from zyblog_test_user");
$stmt->execute();

$row = $stmt->fetch();
print_r($row);
// Array
// (
//     [id] => 1
//     [0] => 1
//     [username] => aaa
//     [1] => aaa
//     [password] => aaa
//     [2] => aaa
//     [salt] => aaa
//     [3] => aaa
// )

从返回的结果来看,我们没有给 PDO 对象指定 PDO::ATTR_DEFAULT_FETCH_MODE 属性,所以它是返回的默认的 PDO::FETCH_BOTH 格式,也就是字段名和下标同时存在的。其实这个方法可以直接指定我们需要的 FETCH_STYLE 。

结果集类型指定

$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
// Array
// (
//     [id] => 2
//     [username] => bbb
//     [password] => bbb
//     [salt] => 123
// )

$row = $stmt->fetch(PDO::FETCH_LAZY);
print_r($row);
// PDORow Object
// (
//     [queryString] => select * from zyblog_test_user
//     [id] => 3
//     [username] => ccc
//     [password] => bbb
//     [salt] => c3
// )

$row = $stmt->fetch(PDO::FETCH_OBJ);
print_r($row);
// stdClass Object
// (
//     [id] => 4
//     [username] => ccc
//     [password] => bbb
//     [salt] => c3
// )

和指定 PDO 对象的 PDO::ATTR_DEFAULT_FETCH_MODE 一样。使用 fetch() 方法时直接将需要的返回结果类型参数指定到方法的第一个参数,就实现了 FETCH_STYLE 的指定。具体支持的格式和之前讲过的 PDO 对象的 PDO::ATTR_DEFAULT_FETCH_MODE 属性是完全一样的,大家可以自行查阅。

获取全部数据

从代码和定义中可以看出,fetch() 方法是获取当前数据集的下一行数据,就像数据库的游标操作一样。所以,我们可以通过循环 fetch() 来对结果集进行遍历,从而获得所有的结果集数据。

 while($row = $stmt-><b style="color:transparent">来源gao@dai!ma.com搞$代^码网</b>fetch()){
    print_r($row);
}
// Array
// (
//     [id] => 2
//     [0] => 2
//     [username] => bbb
//     [1] => bbb
//     [password] => bbb
//     [2] => bbb
//     [salt] => 123
//     [3] => 123
// )
// ……

MySQL 不支持游标

上文中提到了游标操作,PDO 扩展是支持游标的,但是需要注意的是,MySQL 扩展并不支持这个操作。所以我们使用游标相关的属性对于 MySQL 库是没有效果的。

$stmt = $pdo->prepare("select * from zyblog_test_user", [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL]);
$stmt->execute();

$row = $stmt->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT);
print_r($row);
// Array
// (
//     [id] => 1
//     [username] => aaa
//     [password] => aaa
//     [salt] => aaa
// )

$stmt = $pdo->prepare("select * from zyblog_test_user", [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL]);
$stmt->execute();

$row = $stmt->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_LAST);
print_r($row);
// Array
// (
//     [id] => 1
//     [username] => aaa
//     [password] => aaa
//     [salt] => aaa
// )

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:三分钟带你了解PHP中的查询结构集

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址