开发者社区> 高久峰> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: php mysql 异步, php mysql 异步并发查询
+关注继续查看

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);

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
PHP连接MySql数据库
<?php // 数据库服务器IP或地址 $mysql_server_name='localhost';  // 数据库用户名 $mysql_username='demo';  // 数据库密码 $mysql_password='K8q7N4M7';  // 数据库名 $mysql_databas.
1814 0
PHP面试题:你常用到的mysql命令?
PHP面试题:你常用到的mysql命令?
56 0
PHP连接MySQL 8.0报错的解决办法
PHP连接MySQL 8.0报错的解决办法
149 0
+关注
高久峰
开源中国GVP
54
文章
67
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载