PHP数据库学习之怎样一次执行多条SQL命令?

在之前的文章中给大家带来了《PHP中获取SQL的查询结果的常用函数整理(实例详解)》,其中详细的介绍了PHP中查询数据库时常用的几个函数,本篇我们来看一下怎样一次执行多条SQL命令的相关知识。希望对大家有帮助!

在之前的文章中给大家带来了《PHP中获取SQL的查询结果的常用函数整理(实例详解)》,其中详细的介绍了PHP中查询数据库时常用的几个函数,本篇我们来看一下怎样一次执行多条SQL命令的相关知识。希望对大家有帮助!

PHP数据库学习之怎样一次执行多条SQL命令?

千万级数据并发如何处理?进入学习

在上篇文章中我们给大家介绍了获取SQL的查询结果的常用函数,通过不同的函数来查询数据返回的形式不同,运行mysqli_query() 函数每次只能执行一条SQL命令,在PHP中有一个函数可以让代码一次执行多条SQL命令,那就是mysqli_multi_query() 函数,接下来让我们一起来了解一下mysqli_multi_query() 函数吧。

mysqli_multi_query() 函数

在我们前面介绍的 mysqli_query() 函数的时候,运行该函数每次只能执行一条SQL命令,但是想要执行多条SQL命令的时候,mysqli_query() 函数就不能满足我们了,这时候我们就需要通过mysqli_multi_query() 函数来实现一次执行多条 SQL 命令。

mysqli_multi_query() 函数的语法格式如下:

mysqli::multi_query(string $query)登录后复制

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

mysqli_multi_query(mysqli $link, string $query)登录后复制

其中需要注意的是:

  • $query 表示为要查询的 SQL 语句

  • $link 表示为使用 mysqli_connect() 函数返回的链接标识

  • $query 表示参数,其中可以包含多条 SQL 命令,每条 SQL 命令之间使用分号;分隔。如果第一条 SQL 命令在执行时没有出错,那么这个函数就会返回 TRUE,否则将返回 FALSE。

接下来我们通过示例来看一下mysqli_multi_query() 函数的使用,来执行多条SQL命令,示例如下:

connect_errno){
die(;数据库连接失败:;.$mysql->connect_errno);
}else{
$sql = ;select id,name from user;;; // SQL 语句
$sql .= ;select sex,age from user;; // SQL 语句
if($mysql -> multi_query($sql)){
do{
if ($result = $mysql -> store_result()) {
while ($row = $result->fetch_row()) {
print_r($row);
}
$result->free();
}
if ($mysql -> more_results()) {
echo ;;;
}else{
break;
}
} while ($mysql -> next_result());
}
$mysql -> close();
}
?>登录后复制

输出结果:

PHP数据库学习之怎样一次执行多条SQL命令?

上述结果通过mysqli_multi_query() 函数完成了执行多条SQL命令,

其中我们需要注意的是:

因为 mysqli_multi_query() 函数能够连接执行一个或多个查询,而每条 SQL 命令都可能返回一个结果,在必要时需要获取每一个结果集。所以对该函数返回结果的处理也有了一些变化,第一条查询命令的结果要用 mysqli_use_result() 或 mysqli_store_result() 函数来读取。

也可以使用 mysqli_store_result() 函数将全部结果立刻取回到客户端,而且这么做的效率更高。另外,可以使用mysqli_more_results() 函数检查是否还有其他结果集。

如果想对下一个结果集进行处理,可以使用 mysqli_next_result() 函数获取下一个结果集,有下一个结果集时该函数返回 TRUE,没有时返回 FALSE,在有下一个结果集的情况下,也需要使用 mysqli_use_result() 或 mysqli_store_result() 函数来读取结果集的内容。

上述使用的是面向对象的方法,接下来看一下面向过程的方法,示例如下:

登录后复制

输出结果与上述结果相同,由此我们便通过mysqli_multi_query() 函数一次性完成多条SQL命令。

大家如果感兴趣的话,可以点击《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/27257/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022-09-29 5:09:28
下一篇 2022-09-29 5:10:11

软件定制开发公司

相关阅读

发表回复

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