当前位置:首页 > PHP > 正文内容

php mysql 异步, php mysql 异步并发查询

高老师4年前 (2021-05-28)PHP1167

mysqli提供了异步执行sql的功能,类似于select轮询机制。先提交SQL到预发布,再去轮询查询是否ok。query的时候加上MYSQLI_ASYNC选项,query就直接提交到mysql,但是本身不等待执行结果。mysqli不亏是加强版的mysql扩展,可惜不是pdo

<?php
/**
 * 执行SQL
 * @param $sql
 * @return mysqli
 */
function query($sql)
{
    // 1.创建连接
    $servername = "localhost";
    $username = "root";
    $password = "root";
    $database = "test";
    $conn = new mysqli($servername, $username, $password, $database);
    if ($conn->connect_error) {
        die("连接失败: " . $conn->connect_error);
    }

    // 2.异步提交SQL
    $conn->query($sql, MYSQLI_ASYNC);

    // 3.返回SQL连接
    return $conn;
}

// 1.保存全部的Conn变量
$all_conn = [];

// 2.循环提交异步SQL
$i = 4;
while ($i--) {
    $sql = "select scenes_name_cn from erp_allocation_scenes where id = $i";
    $all_conn [] = query($sql, MYSQLI_ASYNC);
}

// 3.循环等待全部的结果
$allResult = [];
do {
    $links = $errors = $reject = $all_conn;
    if (!mysqli_poll($links, $errors, $reject, 1)) {
        continue;
    }
    foreach ($all_conn as $conn) {
        if ($result = $conn->reap_async_query()) {
            $allResult[] = $result->fetch_row();
            if (is_object($result)) {
                $result->free();
            }
        } else {
            throw new mysqli_sql_exception(sprintf("MySQLi Error: %s", mysqli_error($conn)));
        }
    }
} while (count($allResult) == 5);

// 4.输出查询结果
print_r($allResult);

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/203.html

分享给朋友:

“php mysql 异步, php mysql 异步并发查询” 的相关文章

php解决浮点数精度问题

php解决浮点数精度问题

首先看看以下代码:代码1:<?php $a=0.1; $b=0.7; if($a+$b==0.8) { echo "1"; } else{ echo "2"; } ?>代码2:<?php   &n...

【一】PHP多进程学习-简单创建父子进程.理解父子进程运行流程

【一】PHP多进程学习-简单创建父子进程.理解父子进程运行流程

(1).学习的目标:学会创建父子进程,并且能够区分当前进程是父还是子;了解父进程执行过程,子进程执行过程;能够用多进程执行任务(2).相关函数学习:    (2.1)pcntl_fork()执行时:       &nbs...

pcntl_signal(): Error assigning signal

pcntl_signal(): Error assigning signal

当我想在一个进程中监听kill 和 kill -9命令报了这个错误。//监听kill pcntl_signal(SIGTERM, function () {     posix_kill(0, SIGTERM); });...

posix_ttyname函数详解

posix_ttyname函数详解

posix_ttyname - 获取当前终端设备名称。<?php     var_dump( posix_ttyname(STDOUT) );我们启动一个终端,执行上面的代码输出:/dev/tty1我们再启动一个终端,执行上面的代码输...

在MyISAM引擎中使用事务会怎样

在MyISAM引擎中使用事务会怎样

众所周知MyISAM引擎不支持事务,但是我只是知道不支持事务,并未测试具体的表现是什么,测试代码如下:try {     //开启事务     Db::startTrans();    &...

php爬虫执行js,php执行js

php爬虫执行js,php执行js

当我们使用php爬虫采集网站时经常会遇到内容使用ajax异步加载。一般采取的方案是PHP模拟再请求api接口获取数据,但是有时候前端js加密非常麻烦,我们需要将js的加密方法转换为php方法方便curl请求。当然通过了解我们可以通过3种方案解决。第一种:使用phpv8js扩展执行js代码。(pecl...