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

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

高老师5年前 (2021-05-28)PHP1262

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 数组转换xml,php 数组转成xml,php数组转xml 函数

php 数组转换xml,php 数组转成xml,php数组转xml 函数

源码:特别适用于微信支付中通知微信支付网关function array2xml($arr, $level = 1) { $s = $level == 1 ? "<xml&g...

xmlrpc  php,php通过xml-rpc进行通信

xmlrpc php,php通过xml-rpc进行通信

xmlrpc协议是通过http请求xml数据进行通信。webservice中和它相同的是soap。soap调用的确很简单,但是创建wsdl太繁琐,效率低下。xmlrpc很好的解决这个问题。(1).创建xmlrpc服务端(求和函数api)function getSum($method,$ar...

PHP getenv函数和putenv函数的学习

PHP getenv函数和putenv函数的学习

(1).在PHP中可以查看的环境变量包括: (1.1).电脑环境变量 (2.1).服务器环境变量(2).getenv()函数获取一个环境变量的值.参数1是环境变量的key,参数2值为true的时候仅从你的电脑环境变量中查找,参数2值为false会从两种变量中全部查询//获取我电脑登录的用户名,输出A...

pcntl_signal(): Error assigning signal

pcntl_signal(): Error assigning signal

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

PHP Startup: Unable to load dynamic library 'C:\php\ext\php_curl.dll找不到指定的模块

PHP Startup: Unable to load dynamic library 'C:\php\ext\php_curl.dll找不到指定的模块

最近在编写windows php多线程的东西,从官网下载了PHP的线程安全版,尝试开启curl扩展extension=php_curl.dllphp -m 却提示 PHP Startup: Unable to load dynamic library 'C:\php\ext\php_curl...

php代理下载,php代下载文件,php下载远程文件,php远程文件下载

php代理下载,php代下载文件,php下载远程文件,php远程文件下载

经常我们下载国外资源容易被墙,可以通过php脚本获取远程文件流然后输出给我们的浏览器来下载。<?php //设置下载文件的url $url = 'https://mirrors.huaweicloud.com/ubuntukylin/ubuntukylin-19....