mysql_li async 一步查询

本文介绍了一种使用 PHP 和 MySQL 进行异步查询的方法,通过实例展示了如何利用 mysqli 的异步特性来提高数据库查询效率。这种方法可以有效减少等待响应的时间,特别适用于需要频繁查询的高并发场景。
<?php
/**
 *	php_msyql  	异步查询
 *	@reference 	http://www.walu.cc/php/async-mysql-query.md
 *	@author 	zhenghua
 *	@date  		2015/6/8
 **/
$host = '127.0.0.1';
$user = 'root';
$password = '';
$database = 'dbtest';

$result = array(1=>0, 2=>0, 3=>0);

$time_start = microtime(true);
$links = array();

foreach ($result as $key => $value) {
	$obj = new mysqli($host, $user, $password, $database);
	$links[spl_object_hash($obj)] = array('value'=>$key, 'link'=>$obj);

}

$done = 0;
$total = count($links);

foreach ($links as $key => $value) {
	$value['link']->query("SELECT COUNT(*) AS `total` FROM `demo` WHERE `value`={$value['value']}", MYSQLI_ASYNC); 
}

do{
    $tmp = array();
    foreach ($links as $value) {
        $tmp[] = $value['link'];
    }

 
    $read = $errors = $reject = $tmp;
    $re = mysqli_poll($read, $errors, $reject, 1);
    if (false === $re) {
        die('mysqli_poll failed');
    } elseif ($re < 1) {
    	print_r($done);
        continue;
    }
 
    foreach ($read as $link) {
    	print_r($done);
        $sql_result = $link->reap_async_query();
        if (is_object($sql_result)) {
            $sql_result_array = $sql_result->fetch_array(MYSQLI_ASSOC);//只有一行
          
            $sql_result->free();
            $hash = spl_object_hash($link);
            $key_in_result = $links[$hash]['value'];
            $result[$key_in_result] = $sql_result_array['total'];
        } else {
            echo $link->error, "\n";
        }
        $done++;
    }
    

    foreach ($errors as $link) {
        echo $link->error, "1\n";
        $done++;
    }
	
// 	foreach ($reject as $link) {
// 		printf('server is busy, client was projected.\n',$link->connect_error,$link->error);
// 	}
	
} while($done < $total);

var_dump($result);

echo 'ASYNC_QUERY_TIME:'.(microtime(true)-$time_start),PHP_EOL;;

$link = end($links);
$link = $link['link'];
echo PHP_EOL;

//平常顺序时间
$time_start = microtime(true);
$reuslt = array(1=>0, 2=>0, 3=>0);
foreach ($result as $key => $value) {
	$sql_result = $link->query("SELECT COUNT(*) AS `total` FROM demo WHERE `value`={$key}");
	if(is_object($sql_result)){
		$sql_result_array = $sql_result->fetch_array(MYSQLI_ASSOC);
		$sql_result->free();
		$result[$key] = $sql_result_array['total'];
	} else {
		echo PHP_EOL;
	}
}

var_dump($reuslt);
echo "COMM_QUERY_TIME:",microtime(true)-$time_start,PHP_EOL;



Vue.js是一个前端框架,而MySQL是一个关系型数据库管理系统,两者通常通过后端技术(如Node.js、Express等)结合使用,以便在Vue应用中操作MySQL数据。 以下是基本步骤: 1. **设置后端**: 使用Node.js作为服务器端语言,安装 Express 框架和 MySQL 连接模块例如 `mysql2` 或 `sequelize`。 ```bash npm install express mysql2 ``` 2. **配置数据库连接**: 在后端代码中,创建一个数据库连接池,提供数据库配置信息,如主机、用户名、密码和数据库名。 ```javascript const mysql = require('mysql2'); const pool = mysql.createPool({ host: 'your_host', user: 'your_user', password: 'your_password', database: 'your_database' }); ``` 3. **编写API接口**: 创建处理CRUD(增删改查)操作的路由,在这些路由中使用数据库连接执行SQL查询。 ```javascript app.get('/api/users', async (req, res) => { try { const [rows] = await pool.query('SELECT * FROM users'); res.json(rows); } catch (error) { console.error(error); res.status(500).json({ error: 'Internal Server Error' }); } }); ``` 4. **在Vue中调用API**: 在Vue组件内,使用axios或其他HTTP库向这些后端API发送GET、POST请求,并处理返回的数据。 ```vue <template> <ul> <li v-for="user in users" :key="user.id"> {{ user.name }} </li> </ul> </template> <script> import axios from 'axios'; export default { data() { return { users: [] }; }, created() { axios.get('/api/users') .then(response => (this.users = response.data)) .catch(error => console.error(error)); } }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值