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

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

高老师6年前 (2021-05-28)PHP1346

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对象转数组

function objtoarr($obj){ $ret = array(); foreach($obj as $key =>$value){ if(gettype($value) == 'arr...

php将html转为pdf,php将html页面导出pdf

php将html转为pdf,php将html页面导出pdf

首先下载wkhtmltox-0.12.4_linux-generic-amd64.tar.xz   (不要下载RPM包,依赖太多,需要x-server支持),并解压,执行测试运行正常tar wkhtmltox-0.12.4_linux-generic-amd64.tar.xzcd...

 php xml字符串转数组,phpxml转数组,php 将xml转换成数组

php xml字符串转数组,phpxml转数组,php 将xml转换成数组

001源码:/*  * $xml_str是xml字符串  */ function  xmltoarray($xml_str) { //禁止XML实体扩展攻击 libxml_disable_entity_loader(true); //拒绝包含...

php迭代器学习

php迭代器学习

php官方已经提供了Iterator(迭代器)接口,通过网上资料的学习,目前看适合超大集合或者数组提取使用。学习一个函数的实现对比内存占用差距.使用迭代器和普通循环实现range()函数。(1).普通循环实现range()函数。function newrange($low, $h...

PHP二维数组排序,PHP多维数组排序, array_multisort()

PHP二维数组排序,PHP多维数组排序, array_multisort()

使用php函数array_multisort()即可实现和SQL一样的order by排序. 例如我们需要对会员表按照主键降序排列,年龄升序排列://会员表数据 $list = []; $list[] = ['mid' =>&n...

thinkphp虚拟主机部署,Laravel虚拟主机部署

thinkphp虚拟主机部署,Laravel虚拟主机部署

适用于虚拟主机无法设置public目录为网站目录的虚拟主机(1).根目录创建index.php<?php //设置网站目录 $root_path = __DIR__ . DIRECTORY_SEPARATOR . 'publ...