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); function objtoarr($obj){ $ret = array(); foreach($obj as $key =>$value){ if(gettype($value) == 'arr...
前面的文章对于高并发下单商品导致商品库存为负值的问题请先阅读再阅读本篇文章一定对您有帮助,建议亲手测试较好。加上文件锁后的下单处理代码:【一】.阻塞模式:(如果其他进程已经加锁文件,当前进程会一直等其他进程解锁文件后继续执行)<?php //连接数据库 $con=mysqli_connect(...
Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者(publisher),订阅者(subscriber)和频道(channel)。 发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个...
主要原理是通过PHP创建多个子进程,在子进程中发送进程闹钟信号,然后再监听闹钟信号中继续发送闹钟信号。同时通过父进程设置非阻塞运行。代码如下:<?php /** * 订单任务 */ class Order { &n...
(1).在PHP中可以查看的环境变量包括: (1.1).电脑环境变量 (2.1).服务器环境变量(2).getenv()函数获取一个环境变量的值.参数1是环境变量的key,参数2值为true的时候仅从你的电脑环境变量中查找,参数2值为false会从两种变量中全部查询//获取我电脑登录的用户名,输出A...
经常我们下载国外资源容易被墙,可以通过php脚本获取远程文件流然后输出给我们的浏览器来下载。<?php //设置下载文件的url $url = 'https://mirrors.huaweicloud.com/ubuntukylin/ubuntukylin-19....