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); 项目需要使用websocket推送最新订单,客户服务器非linux不支持swoole,因此使用原生,直接上代码(1).PHP服务端<?php ini_set('error_reporting', E_ALL ^ E_NOTICE); ini_set...
php arrayaccess 官方的说法是让你能以数组的形式访问对象,对于这种php内置接口一直不太明白有什么用,坚持多看文章,终于理解,特来分享,思路不同,更易于理解。(1).创建一个学生类,并且实现arrayaccess 接口。<?php class studen...
ThinkPHP中有一个debug调试功能,能输出报错文件的信息,并能看到这个函数被哪些函数调用,从框架的启动开始记录,特别方便调试。于是研究了下它的底层给予了实现。<?php //--框架核心--Start //框架内置错误处理 function errDealWith($er...
今天帮朋友查询wordpress执行超级慢的原因,特此记录开启fpm的慢日志,记录执行超过30秒的脚本request_slowlog_timeout = 30 slowlog = var/log/slow.log查看日志[23-May-2019 17...
php7新增的特性(1).强制限制只能返回一种类型<?php class task { } //must return an integer function add(): int { &nb...
在项目下的composer配置文件修改(PaySdk是我这里一个支付sdk的目录,包含各种各样的支付sdk,这样写的意思让composer自动把PaySdk下的所有文件自动加载):"autoload": { &...