PHP数据库学习之怎样获取查询结果的行数?

在之前的文章中给大家带来了《PHP数据库学习之怎样一次执行多条SQL命令?》,其中详细介绍了PHP中想要一次执行多条SQL命令的相关知识,本篇我们来看一下PHP中怎样获取查询结果的行数,希望对大家有帮助!

在之前的文章中给大家带来了《PHP数据库学习之怎样一次执行多条SQL命令?》,其中详细介绍了PHP中想要一次执行多条SQL命令的相关知识,本篇我们来看一下PHP中怎样获取查询结果的行数,希望对大家有帮助!

PHP数据库学习之怎样获取查询结果的行数?

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

在之前的学习中,我们已经了解怎样获取SQL的查询结果,怎样一次执行多条SQL语句,在PHP中是有函数能够获取查询结果的行数的,也就是查询到的结果集中有多少条数据,这个函数就是 mysqli_num_rows() 函数,那接下来我们就来看一下mysqli_num_rows() 函数的相关知识吧。

mysqli_num_rows() 函数

在 PHP 中,想要获取由 SELECT 语句查询到的结果集中有多少条数据的话,则需要使用 mysqli_num_rows() 函数来实现。首先我们来看一下该函数的语法结构:

$mysqli_result -> num_rows;登录后复制

这是面向对象写法的语法,下面是面向过程写法的语法:

mysqli_num_rows(mysqli_result $result)登录后复制

其中我们需要注意的是:

  • $mysqli_result和 $result 为使用 mysqli_query() 函数返回的结果集。

  • mysqli_num_rows() 函数仅对 SELECT 语句有效,如果返回的行数大于 PHP_INI_MAX,则将行数以字符串的形式返回。

接下来我们通过示例来看一下mysqli_num_rows() 函数的用法吧

示例如下:

connect_errno){
die(;数据库连接失败:;.$mysql->connect_errno);
}else{
$sql = ;select name,sex,age from user;; // SQL 语句
$result = $mysql -> query($sql); // 执行上面的 SQL 语句
$num = $result -> num_rows; // 获取查询结果的行数
$mysql -> close();
}
echo ;一共查询到 ;.$num.; 条记录。;;
?>登录后复制

输出结果:

PHP数据库学习之怎样获取查询结果的行数?

上述示例是通过面向对象的写法,下面看一下面向过程的写法:

登录后复制

其输出结果与上述结果相同,上述事例中通过mysqli_num_rows() 函数完成了查询数据集有多少条数据的结果。

下面给大家补充一下,之前我们学习查询结果的时候输出的结果都是索引数组或者是关联数组的形式返回的结果,下面给大家补充一下通过对象的形式返回,那就要通过mysqli_fetch_object() 函数来实现。

mysqli_fetch_object() 函数

mysqli_fetch_object() 函数能够从结果集中取得一行,并以对象的形式返回,它的语法格式如下:

mysqli_result::fetch_object([string $class_name = \”stdClass\”[, array $params]])登录后复制

这是面向对象的写法,下面我们看一下面向过程的写法语法格式如下:

mysqli_fetch_object(mysqli_result $result[, string $class_name = \”stdClass\”[, array $params]])登录后复制

其中需要注意的是:

  • mysqli_result 表示mysqli_query() 函数获取的结果集;

  • $class_name 表示为可选参数,用来规定实例化的类名称,设置属性并返回;

  • $params 表示为可选参数,用来规定一个传给 $classname 的构造函数的可选参数数组。

接下来我们通过示例来看一下mysqli_fetch_object() 函数返回结果集中的当前行,并输出每个字段的值。

示例如下:

connect_errno){
die(;数据库连接失败:;.$mysql->connect_errno);
}else{
$sql = ;select name,sex,age from user;; // SQL 语句
$result = $mysql -> query($sql); // 执行上面的 SQL 语句
if($result){
while($obj = $result -> fetch_object()){
printf(;姓名:%s,性别:%s,年龄:%s ;, $obj->name,$obj->sex,$obj->age);
}
}
$mysql -> close();
}
?>登录后复制

输出结果:

PHP数据库学习之怎样获取查询结果的行数?

由此我们便通过mysqli_fetch_object() 函数可以从结果集中取得一行,并以对象的形式返回。

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

一文讲解Mysql怎么根据ID值的顺序返回结果

转载2021-10-26 16:42:26857 + php学习QQ群(点击入群)今天遇到一个问题 就是有个查询需要按照指定的 ID 值顺序来返回结果集 其实也可以放在程序中做排序 但是突然想看看能不能直接使用Mysql直接查询返回 就找了下 还真有辅助函数实现。

Field()函数

Mysql中有提供一个函数 Field() 可以按照我们给定的顺序来自定义排序

示例:

假设现在有张城市信息表 叫 regions 有 主键 id 和 一个名称属性 name, 现在想查询 ID 为 2、3、1 并按照这个顺序返回

select id, name from regions;#id name 1 北京 2 上海 3 深圳

登录后复制

使用 field()

select id, name from regions order by field(id, 2, 3, 1);#id name 2 上海 3 深圳 1 北京

登录后复制

这样就达到按按自定义顺序排序的目的了

性能

mysql> explain select id from regions order by field(id, 2, 3, 1);+—+————-+———+——+—————+—–+———+—–+——+—————————–+|id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra ||– | ———– | ——- | —- | ————- | — | ——- | — | —- | —————————-| |1 | SIMPLE| regions | index| NULL | id | 4 | NULL| 3 | Using index; Using filesort |+—+————-+———+——+—————+—–+———+—–+——+—————————–+

登录后复制

因为我们在使用 Order By Field 的时候指定了是按照 主键ID 来排序 主键有个 Primary 的主键索引 他会使用id来寻找条件等于 2,3,1 的记录 所以可以看到在 Extra 中有 Using index 如果你换个别的没有索引的字段这里就不会有它了。而 Order By 子句不能使用该索引 只能使用 Filesort 排序 也就是 Extra 中有 Using filesort 的原因

大概过程如下:

从id索引的第一个叶子节点出发,按顺序扫描所有叶子节点根据每个叶子节点记录的主键id去主键索引(聚簇索引))找到真实的行数据判断行数据是否满足 id = 2、3、1 条件,若满足,则取出并返回

基本要遍历全表了 有人说 它把选出的记录的 id 在 FIELD 列表中进行查找,并返回位置,以位置作为排序依据。这样的用法,会导致 Using filesort(当然使用了Filesort 并不一定就会慢 有时候比不是用要更快),是效率很低的排序方式。

通常ORDER BY子句会与LIMIT子句配合,只取出部分行。如果只是为了取出top1的行 却对所有行进行排序,这显然不是一种高效的做法。

总结

Field() 函数可以帮助我们在数据库层直接完成一些需要的排序 可以简化业务代码,但是同时它还会有兼容性和性能问题 建议可以用在数据变化频率低 或者有长时间缓存的地方,而在数据量很大的情况下 可以采用数据库查询出数据在到程序中来排序吧

以上就是一文讲解Mysql怎么根据ID值的顺序返回结果的详细内容,更多请关注钦钦技术栈其它相关文章!

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

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

(0)
上一篇 2022-09-29 5:08:51
下一篇 2022-09-29 5:09:53

软件定制开发公司

相关阅读

发表回复

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